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()を使用すると、次のエラーが発生します。
==========
スレッド"main"の例外org.mockito.exceptions.misusing.InvalidUseOfMatchersException:引数マッチャーの使用が無効です!4人のマッチャーが予想され、1人が記録されました:-> com.knewton.scratch.Scratch2.main(Scratch2.java:37)
この例外は、マッチャーが生の値と組み合わされている場合に発生する可能性があります。//不正解: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)で
===========
これはmockito1.9.5にあります