[英]How to verify mocked method not called with any combination of parameters using Mockito
如何使用Mockito驗證模擬方法根本沒有被調用 - 使用任何參數組合?
例如,我有一個對象 - myObject
- 使用第二個myMockedOtherObject
對象 - myMockedOtherObject
- 它有一個方法 - someMethodOrOther(String parameter1, String parameter2)
。
我想調用myObject.myMethod()
並驗證someMethodOrOther()
沒有被調用 - 使用任何參數組合。
例如:
myObject.doSomeStuff();
verify(myMockedOtherObject, never()).someMethodOrOther();
除非我不能這樣做,因為someMethodOrOther()
需要提供特定的參數。
你可以用Mockito的論證匹配器來完成你想要的東西:
myObject.doSomeStuff();
verify(myMockedOtherObject, never()).someMethodOrOther(
Mockito.anyString(),
Mockito.anyString()
);
你可以說,少一點冗長用靜態導入像你這樣有verify
和never
。
你需要使用參數匹配器來做這樣的事情。 您提供了一個參數匹配器來對應方法中的每個參數,但您必須確保選擇一個具有正確類型的參數。 您可能需要的所有內容都列在http://docs.mockito.googlecode.com/hg/latest/org/mockito/Matchers.html 。
假設你的方法是
public void myMethod(
String text, int count, MyClass something, List<MyClass> someList) {
// ...
}
您的驗證聲明可能如下所示。
verify(myMock, never()).myMethod(
anyString(), anyInt(), any(MyClass.class), anyListOf(MyClass.class));
您可能需要的一些匹配器是 -
anyInt(), anyLong(), anyShort(), anyBoolean(), anyByte(), anyChar(), anyFloat(), anyDouble()
- 這些匹配每種類型的原始版本或對象版本。 在我的例子中,我使用anyInt()
匹配一個int
,但它也匹配一個Integer
。 any(XXX.class)
- 這將匹配任何對象類型。 在我的例子中,我用它來匹配MyClass
。 anyString()
- 這是編寫any(String.class)
的另一種方法 anyListOf(XXX.class), anySetOf(XXX.class), anyMapOf(XXX.class, XXX.class)
- 這些適用於匹配標准泛型集合類型。 在我的例子中,我使用anyListOf
來匹配List<MyClass>
。 還有一些其他人,我強烈建議您通過Javadoc進行簡短的瀏覽。 但是這些是你最有可能使用never()
。
更清晰地呈現解決方案的方式
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.never;
//Testing scenario
verify(mockObject, never()).someMethod(mockParam1, MockParam2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.