web-dev-qa-db-ja.com

Mockito.any()はジェネリックとのインターフェイスを渡します

ジェネリックでインターフェースのタイプを渡すことは可能ですか?

インターフェース:

public interface AsyncCallback<T>

私のテスト方法では:

Mockito.any(AsyncCallback.class)

<ResponseX>の後ろまたは.classの配置は機能しませんでした。

136
lrxw

タイプセーフな方法があります:ArgumentMatchers.any()を使用し、タイプで修飾します:

ArgumentMatchers.<AsyncCallback<ResponseX>>any()

pierrefevrierがコメントで言及したように、Mockitoの新しいバージョンでは

Matchers.<AsyncCallback<ResponseX>>any()
246
thSoft

型推論が強化されているため、Java 8を使用すると、引数または型パラメーターなしでany()(静的インポートを想定)を使用できます。コンパイラーは、ターゲット型(メソッド引数の型)から、実際にはMatchers.<AsyncCallback<ResponseX>>any()を意味することを認識します。これは、Java 8より前のソリューションです。

56
herman

ジェネリックを許可するには、次のメカニズムを採用する必要がありました。

import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);

これが誰かを助けることを願っています。

14
theINtoy

Pierrefevrierコメントを回答として投稿します。これは、コメントの代わりに回答に含まれる場合に便利です。

Mockitoの新しいバージョン:(Matchers.<AsyncCallback<ResponseX>>any()

4
sag

ThSoftの答えに加えて、メソッドにany()の修飾された呼び出しを置くと、戻り値の型が推論を許可するため、修飾を削除できます。

private HashMap<String, String> anyStringStringHashMap() {
    return Matchers.any();
}
1
JWGS

必要に応じて、抑制警告を追加してキャストすることができます:

@SuppressWarnings("unchecked")    
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)

Javaが 'generic'ジェネリックを許可している場合、このようなメソッドを探している可能性があります。

private static <T, E> T<E> mock(Class<T<E>> clazz)
0
Garrett Hall