簡體   English   中英

Java驗證void方法使用Mockito調用n次

[英]Java verify void method calls n times with Mockito

我正在嘗試驗證在DAO中調用(void)方法 - 我正在使用一個提交點,該提交點將結果列表發送到該點,重置列表並繼續。 假設我在列表中有4個東西,並且我的提交點為1,我希望“send”方法被調用4次。 我可以通過編寫來驗證該方法是否被調用一次

Mockito.verify(mock).send()

它通過..但我想驗證它被調用的次數。 我想是的

Mockito.verify(mock.send(), times(4))

就足夠了,但它說參數不正確驗證。

順便說一句,如果我將Mockito.verify(mock).send()更改為Mockito.verify(mock.send())Mockito.verify((mock).send())我會得到相同的錯誤。 對此的想法?

必要的方法是Mockito#verify

public static <T> T verify(T mock,
                           VerificationMode mode)

mock是您的mock對象, modeVerificationMode ,它描述了如何驗證模擬。 可能的模式是

verify(mock, times(5)).someMethod("was called five times");
verify(mock, never()).someMethod("was never called");
verify(mock, atLeastOnce()).someMethod("was called at least once");
verify(mock, atLeast(2)).someMethod("was called at least twice");
verify(mock, atMost(3)).someMethod("was called at most 3 times");
verify(mock, atLeast(0)).someMethod("was called any number of times"); // useful with captors
verify(mock, only()).someMethod("no other method has been called on the mock");

您需要從Mockito類中進行這些靜態導入才能使用verify方法和這些驗證模式:

import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.only;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

所以在你的情況下,正確的語法將是:

Mockito.verify(mock, times(4)).send()

這將驗證方法send是否在模擬對象上調用了4次。 如果被調用少於或多於4次,它將失敗。


如果您只想檢查,如果方法已被調用一次,那么您不需要傳遞VerificationMode 一個簡單的

verify(mock).someMethod("was called once");

就足夠了。 它在內部使用verify(mock, times(1)).someMethod("was called once");


可以在同一個模擬上進行多次驗證調用,以實現“之間”驗證。 Mockito不支持像這樣的verify(mock, between(4,6)).someMethod("was called between 4 and 6 times"); ,但我們可以寫

verify(mock, atLeast(4)).someMethod("was called at least four times ...");
verify(mock, atMost(6)).someMethod("... and not more than six times");

相反,要獲得相同的行為。 包含邊界,因此當方法被調用4,5或6次時,測試用例為綠色。

暫無
暫無

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

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