2 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
這里沒有答案:你走錯(cuò)了路(至少對于給定的例子):
意思是:當(dāng)你創(chuàng)建一個(gè)“API”時(shí),你要實(shí)現(xiàn)“易于使用,難以誤用”。需要按特定順序調(diào)用方法的 API 無法實(shí)現(xiàn)這一點(diǎn)。因此:感覺需要以編程方式檢查訂單可能表明您正在做“錯(cuò)誤的事情”。您應(yīng)該設(shè)計(jì)一個(gè)“做正確的事情”的 API,而不是期望您的代碼的用戶為您做這件事。
除此之外:當(dāng)您正在測試列表,你絕對不希望使用擺在首位嘲諷。
您想確保元素以特定順序添加到列表中嗎?然后一個(gè)簡單的
assertThat(actualList, is(expectedList));
是您的測試應(yīng)該檢查的唯一一件事!
意思是:不是測試實(shí)現(xiàn)細(xì)節(jié)(add()
使用這個(gè)和那個(gè)參數(shù),按這個(gè)和那個(gè)順序調(diào)用),你只需檢查該操作的可觀察結(jié)果。你不關(guān)心添加的順序,也許重新設(shè)置和更新,你只關(guān)心最終的結(jié)果!
鑒于 OP 的評論:當(dāng)您必須“按順序”處理某些調(diào)用/對象時(shí),您應(yīng)該設(shè)計(jì)一個(gè)允許您傳達(dá)該意圖的界面。您只是通過單元測試來測試您的意圖。這當(dāng)然是一個(gè)好的開始,但還不夠!
基本上,有兩個(gè)概念可以為您工作:
序號:當(dāng)對象按順序進(jìn)入時(shí),順序很重要,那么每個(gè)對象都應(yīng)該收到一個(gè)唯一的(最好是升序的)序號。然后每個(gè)處理元素的步驟都可以簡單地記住最后處理的序列號,如果進(jìn)入的是較低的序列號,則拋出異常。
“命令”的序列。OP 希望確保方法調(diào)用按順序發(fā)生。這根本不是一個(gè)有用的抽象。相反:可以創(chuàng)建一個(gè)
Command
類(執(zhí)行“某事”),然后為每個(gè)所需的活動創(chuàng)建不同的子類。然后您的處理器只需創(chuàng)建一個(gè)List<Command>
. 現(xiàn)在測試歸結(jié)為:生成這樣一個(gè)序列,并檢查每個(gè)條目是否屬于給定類型。
添加回答
舉報(bào)