2017-02-14 58 views
1

我想檢查傳遞給方法的參數......但是檢查必須在第三次調用此方法時完成。Mockito驗證跳過一些電話?

我想答案可能是去:

verify(myMock, times(2)).myMethod(any()); 
verify(myMock).myMethod(paramIWant); 

...但它在第一行失敗:

不過是5倍。不希望調用:

...因爲確實有一個我感興趣的

+0

謝謝。我之前使用過ArgumentCaptor。我希望可能有一種快速的方式來做到這一點! –

+0

我不認爲你會發現任何比我的回答更快的東西。當然,如果您感覺如此傾向,您可以使用註釋來創建捕獲器。 –

+0

「但是5次。」是因爲在第一次驗證中使用的'any()'Matcher是貪婪的並且匹配所有的方法調用。它不知道與其他匹配器有其他驗證呼叫。 –

回答

1

使用參數俘虜爲此後2個電話。您可以在驗證時傳遞捕獲器,然後獲取作爲參數傳遞給此方法的所有值,並檢查您想要的值。

ArgumentCaptor<SomeClass> myCaptor = ArgumentCaptor.forClass(SomeClass.class); 
verify(myMock,times(5)).myMethod(myCaptor.capture()); 

List<SomeClass> paramsPassed = myCaptor.getAllValues(); 
assertEquals(paramIWant, paramsPassed.get(2)); 
+0

非常感謝。非常活潑,很棒。作爲Mockito的新手,我的大部分活動僅限於使用一個類「Mockito」。但是還有其他幾百個類,我有時會想知道他們在做什麼...例如實現'VerificationMode'的類(即'verify'的第二個參數)。毫無疑問,所有的事情都會隨着時間的推移而變得清晰。 –

+0

PS我***覺得***你錯過了這裏,所以我會嘗試編輯......如果我錯了,道歉。 –

+0

啊,是的,謝謝你發現。我總是忘記那部分。 –