簡體   English   中英

Mockito:調用帶有模擬參數的verify()不會觸發失敗

[英]Mockito: Calling verify() with mocked arguments doesn't trigger a failure

我正在做一些測試驅動的開發,並在我的測試用例中添加了一個Mockito verify()調用,如下所示(更改名稱以保護無辜的代碼):

Api api = mock(Api.class);
Thing thing = mock(Thing.class);
when(thing.getId()).thenReturn(1);

// later...
verify(api).doAThingWithAThingId(thing.getId())

即使我尚未將調用api.doAThingWithAThingId()添加到我的代碼中,該測試用例api.doAThingWithAThingId()通過! 但是,當我這樣做時...

int id = thing.getId();
verify(api).doAThingWithAThingId(id);

驗證按預期失敗。 是什么導致此行為?

(出於記錄,此版本使用的是Mockito的稍舊版本1.8.4。)

我剛剛使用Mockito 1.9.5運行了此操作,但無法重現您描述的行為。 但是我相信我知道為什么舊版本可能會發生這種情況。

Mockito具有影響其模擬行為的“存根模式”和“驗證模式”,並且可以根據需要在這些模式之間進行切換。 因此,當您編寫verify ,Mockito會切換到verify模式。 下一次對模擬方法的調用將進行驗證,而不是執行存根操作,但也會使Mockito退出驗證模式。

因此,當您編寫verify(api).doAThingWithAThingId(thing.getId()) ,Mockito 1.8.4進入驗證模式; 但是對thing.getId()的調用thing.getId()verify模式。 然后,對doAThingWithAThingId的調用實際上不會得到驗證。

道德的-在任何版本的Mockito中,請勿在verify的調用參數中調用模擬方法中的任何方法。 在開始驗證之前,請先評估需要的參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM