Jua*_*llo 11 java unit-testing 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){
...
}
Run Code Online (Sandbox Code Playgroud)
我想检查Mockito是否调用了这些方法,所以我尝试使用anyVararg Matcher:
verify(foo).method1(anyVararg());
Run Code Online (Sandbox Code Playgroud)
但是这不会编译"Errors类型中的方法method1(String,String)不适用于参数(Object)"
我有两个问题:
谢谢.
Answer如果调用任何方法,可以使用an 来递增计数器.
private Answer incrementCounter = new Answer() {
public Object answer(InvocationOnMock invocation) throws Throwable {
counter++;
return null;
}
};
Run Code Online (Sandbox Code Playgroud)
请注意,您需要存根所有方法.方法的唯一性基于其签名而不仅仅是方法名称.两个具有相同名称的方法仍然是两种不同的方法.
doAnswer(incrementCounter).when(mockObj.method1(anyString()));
doAnswer(incrementCounter).when(mockObj.method1(anyString(), anyString()));
doAnswer(incrementCounter).when(mockObj.method2(anyString()));
Run Code Online (Sandbox Code Playgroud)
请参阅doAnswer 此处的文档.
可变参数方法具有如下签名:
public void myMethod(String ... arguments){}
Run Code Online (Sandbox Code Playgroud)
您的方法都不是可变参数方法。
我不了解 Mockito,所以我无法为您解决您的问题,但是除非您使用反射,否则不可能对上述所有三种方法进行抽象,所以我想您将不得不对上述每种方法使用单独的情况方法。