2017-12-14 19 views
1

私はクラス内でオブジェクトを偽装したjunitテストをしています。 mockerというMyManagerの@MockでクラスMockerを呼び出しましょう。Mockito doReturnメソッドでメソッドに渡される特定の列挙型を指定します。

例クラス:

public class Mocker { 
    private MyManager myManager; 

    public void myMethod() { 
     String x = "test"; 
     final String result1 = this.myManager.execute(dummyEnum.ENUM_A, x); 
     final String result2 = this.myManager.execute(dummyEnum.ENUM_B, x); 

     if(result1 == true) { 
      //Do something 
     } 
     if(result2 == true) { 
      //Do something else 
     } 
    } 

    public enum dummyEnum { 
     ENUM_A,ENUM_B 
    } 
} 

私の現在のJUnitテストは、以下を使用します。doReturn(null).when(mocker).execute(any(dummyEnum.class), anyObject());

しかし、これは両方の結果1 &結果2のためにnullを返します。 どのように私はENUM_Bで)ENUM_Aで実行されたときに()を実行し、それは(Helloの文字列を返し、実行するように指定することができますが、Goodbye

の文字列を返す私はanswer hereを見てきましたが、私はただ言いたくありませんそのクラスの任意のインスタンス、そのクラスから特定の列挙型を指定したいと思います。

答えて

3

Matchersクラスのeq()メソッド(等価を表す)を使用します。

Mockito.doReturn("Hello").when(mock).execute(Matchers.eq(dummyEnum.ENUM_A), anyObject()); 

Mockito.doReturn("Goodbye").when(mock).execute(Matchers.eq(dummyEnum.ENUM_B), anyObject()); 
2

私はここで答えを見てきましたが、私はちょうどそのクラスのすべてのインスタンス を言いたくない、私はそのようなクラスから特定の列挙型を指定します。これはめったにありません(any()あなたは選択肢を持っていないとしてのみ使用されるべきか、値が関係ないこと:1

import static org.mockito.Mockito.*; 
... 
Mockito.doReturn(null).when(mocker).execute(eq(DummyEnum.ENUM_A), any()); 
Mockito.doReturn(null).when(mocker).execute(eq(DummyEnum.ENUM_B), any()); 

注:お使いの場合には

だけ列挙インスタンスを渡しますケース)。

注2:Matchersクラスを避けてください。代わりにArgumentMatchersを使用してください。
Mockito 2より、このクラスは、Hamcrest org.hamcrest.Matchersクラスとの名前の衝突を避けるために非難されています。また、javadocは、このクラスがバージョン3.0で削除される可能性が高いと述べています。

関連する問題