[英]Verify whether one of three methods is invoked with mockito
我有三種方法,比如這些:
public void method1(String str){
...
}
public void method1(String str, String str2, String str3){
...
}
public void method1(String str, String str2, Object[] objs, String str3){
...
}
我想檢查Mockito是否調用了這些方法,所以我嘗試使用anyVararg Matcher:
verify(foo).method1(anyVararg());
但是這不會編譯“Errors類型中的方法method1(String,String)不適用於參數(Object)”
我有兩個問題:
謝謝。
如果調用任何方法,您可以使用Answer
來遞增計數器。
private Answer incrementCounter = new Answer() {
public Object answer(InvocationOnMock invocation) throws Throwable {
counter++;
return null;
}
};
請注意,您需要存根所有方法。 方法的唯一性基於其簽名而不僅僅是方法名稱。 兩個具有相同名稱的方法仍然是兩種不同的方法。
doAnswer(incrementCounter).when(mockObj.method1(anyString()));
doAnswer(incrementCounter).when(mockObj.method1(anyString(), anyString()));
doAnswer(incrementCounter).when(mockObj.method2(anyString()));
請在此處查看doAnswer
文檔。
vararg方法有這樣的簽名:
public void myMethod(String ... arguments){}
你的方法都不是vararg方法。
我不知道Mockito所以我無法為你解決你的問題,但是除非你使用反射,否則上述所有三種方法都沒有可能的抽象,所以我猜你將不得不為上面的每一個使用單獨的案例方法。
您可以攔截對象上的所有調用,例如在這個答案中: Mockito - 攔截模擬上的任何方法調用 ,然后將其與@Bozho建議的方法結合使用:
private Answer incrementCounter = new Answer() {
public Object answer(InvocationOnMock invocation) throws Throwable {
if (invocation.getMethod().getName().eqauls("someMethid")) {
counter++;
}
return null;
}
};
VendorObject mockObj = mock(SomeClass.class, incrementCounter);
注意:如果為任何此方法提供其他攔截器 - 將不會調用默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.