import org.mockito.Mockito;
public class Scratch2 {
public static class Foo {
}
public interface Custom {
public void someMethod(String arg1, String arg2, String arg3,
String arg4);
}
public static class SomeClass {
private final Custom custom;
public SomeClass(Custom c) {
this.custom = c;
}
public boolean run(Foo someFoo) {
custom.someMethod("Dummy", "Dummy", "Dummy", "Dummy");
return false;
}
}
public static void callSomeMethod(Custom custom) {
custom.someMethod("Dummy", "Dummy", "Dummy", "Dummy");
}
public static void main(String[] args) {
Custom mock = Mockito.mock(Custom.class);
SomeClass c = new SomeClass(mock);
callSomeMethod(Mockito.mock(Custom.class));
c.run(Mockito.any(Foo.class));
}
}
如果我们模拟自定义接口并直接在其上调用 someMethod 是没有问题的。但是使用 run() 会出现以下错误:
==========
线程“主”org.mockito.exceptions.misusing.InvalidUseOfMatchersException 中的异常:参数匹配器的使用无效!预期 4 个匹配器,1 个记录:-> 在 com.knewton.scratch.Scratch2.main(Scratch2.java:37)
如果匹配器与原始值组合,则可能发生此异常: //incorrect: someMethod(anyObject(), "raw String"); 使用匹配器时,所有参数都必须由匹配器提供。例如: //正确:someMethod(anyObject(), eq("String by matcher"));
有关更多信息,请参阅 Matchers 类的 javadoc。
在 com.knewton.scratch.Scratch2$SomeClass.run(Scratch2.java:24) 在 com.knewton.scratch.Scratch2.main(Scratch2.java:37)
===========
这是在模拟 1.9.5