ジェネリックでインターフェースのタイプを渡すことは可能ですか?
インターフェース:
public interface AsyncCallback<T>
私のテスト方法では:
Mockito.any(AsyncCallback.class)
<ResponseX>
の後ろまたは.class
の配置は機能しませんでした。
タイプセーフな方法があります:ArgumentMatchers.any()
を使用し、タイプで修飾します:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
pierrefevrierがコメントで言及したように、Mockitoの新しいバージョンでは
Matchers.<AsyncCallback<ResponseX>>any()
型推論が強化されているため、Java 8を使用すると、引数または型パラメーターなしでany()
(静的インポートを想定)を使用できます。コンパイラーは、ターゲット型(メソッド引数の型)から、実際にはMatchers.<AsyncCallback<ResponseX>>any()
を意味することを認識します。これは、Java 8より前のソリューションです。
ジェネリックを許可するには、次のメカニズムを採用する必要がありました。
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
これが誰かを助けることを願っています。
Pierrefevrierコメントを回答として投稿します。これは、コメントの代わりに回答に含まれる場合に便利です。
Mockitoの新しいバージョン:(Matchers.<AsyncCallback<ResponseX>>any()
ThSoftの答えに加えて、メソッドにany()の修飾された呼び出しを置くと、戻り値の型が推論を許可するため、修飾を削除できます。
private HashMap<String, String> anyStringStringHashMap() {
return Matchers.any();
}
必要に応じて、抑制警告を追加してキャストすることができます:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
Javaが 'generic'ジェネリックを許可している場合、このようなメソッドを探している可能性があります。
private static <T, E> T<E> mock(Class<T<E>> clazz)