亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅驗證方法池中的特定交互

僅驗證方法池中的特定交互

人到中年有點甜 2023-06-04 15:42:46
我目前正在編寫黑盒測試,我必須使用 Mockito 驗證是否使用特定參數調用了方法池中的一個方法。是否調用特定方法并不重要,但必須調用其中一個方法。此外,如果方法被調用,我想驗證它們是否僅使用特定參數調用。在具體層面上:我有這個類被模擬并注入我的黑匣子:class Mock {    void option1(String arg1)    void option2(String arg1, int arg2)    void option3(String arg1, int arg2, int arg3)    void otherMethod()}在黑盒內,一個或多個“optionX”方法被調用一次或多次?,F在我想驗證至少有一個“optionX”方法在黑盒子中被調用,并且如果任何“optionX”方法被調用,它只會用特定的參數調用。目前的測試代碼是這樣的Mock mock = spy(realObject);blackbox.doBlackboxStuff(mock);verify(mock, atLeast(1)).option1("Test");verify(mock, atLeast(1)).option2("Test", 1);verify(mock, atLeast(1)).option3("Test", 1, 2);verifyNoMoreInteractions(mock);像上面這樣單獨的“atLeast(1) 驗證”是行不通的,因為這樣每個方法都必須被調用。此外,我不能保證黑盒不會調用 otherMethod(),因此 verifyNoMoreInteractions 將失敗,即使我不關心 otherMethod() 調用。有沒有一種優雅的方法來解決這個問題(或者至少是一種方法)?
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

有一種方法有點老套但應該有效:


MockingDetails details = Mockito.mockingDetails(mock);

Collection<Invocation> invocations = details.getInvocations();


for(Invocation invocation: invocations){

? ?if(CollectionUtils.isNotEmpty(invocation.getRawArguments()){

? ? ? return;

? ?}

}


fail();

所以基本上,如果至少有一個調用包含您的測試通過的任何參數。假設otherMethod沒有示例中的參數。


查看完整回答
反對 回復 2023-06-04
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

可能是你所有的方法option1......option3調用一些常見的輔助方法。至少它們名稱的相似性表明在功能上也可能存在一些相似性。現在,讓我們假設他們都打電話給helperoptionx然后,您可以檢查是否調用了任何方法,而不是檢查是否helper調用了任何方法。



查看完整回答
反對 回復 2023-06-04
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號