どのようにJavaでユニットテストのための一般的なパラメータを模擬するには?

ロハン・クマール:

私は外部サービスのモックしたい関数のシグネチャを持っています。

public <T> void save(T item, AnotherClass anotherClassObject);

この関数シグニチャを考えると、クラス名IGenericService1はPowerMockでそれを模擬できますか?それともMockito?

このジェネリックのために、私が使用しています。クラスTheodoreでのTのためにT item例えば、私が使用してみました:

doNothing().when(iGenericServiceMock.save(any(Theodore.class),
                    any(AnotherClass.class));

IntelliJのは、このクランク:

save(T, AnotherClass) cannot be applied to 
(org.Hamcrest.Matcher<Theodore>, org.Hamcrest.Matcher<AnotherClass>)

そして、それは以下の理由を挙げています:

reason: No instance(s) of type variable T exist 
so that Matcher<T> conforms to AnotherClass

まず、問題はジェネリック引数が適切に処理された場合に解決するべきです。1は、このような状況で行うことができますいくつかのものは何ですか?

UPDATE:ETOが共有したよう:

doNothing().when(mockedObject).methodToMock(argMatcher); 

同じ運命を共有しています。

ETO:

あなたはに誤ったパラメータを渡していますwhenこれは混乱のビットであってもよいが、二つの異なる用途があるwhen方法は、(実際には、これら2つの異なる方法です)。

  1. when(mockedObject.methodYouWantToMock(expectedParameter, orYourMatcher)).thenReturn(objectToReturn);
    
  2. doReturn(objectToReturn).when(mockedObject).methodYouWantToMock(expectedParameter, orYourMatcher);
    

注:の入力パラメータに注意を払うwhenどちらの場合も方法

あなたの特定のケースでは、このような何かを行うことができます:

doReturn(null).when(iGenericServiceMock).save(any(Theodore.class), any(AnotherClass.class));

これは、あなたのコンパイルの問題を修正します。しかし、テストはして実行時に失敗しますorg.mockito.exceptions.misusing.CannotStubVoidMethodWithReturnValueあなたから何かを返すようにしようとしているためvoidの方法(nullではありませんvoid)。あなたがすべきことは次のとおりです。

doNothing().when(iGenericServiceMock).save(any(Theodore.class), any(AnotherClass.class));

後で、使用して、モックとの相互作用を確認することができますverify方法を。

更新:

あなたの輸入を確認してください。あなたは使用する必要がありますorg.mockito.Matchers.any代わりにorg.hamcrest.Matchers.any

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=202654&siteId=1