2016-05-13 11 views
0

私はユニットテストにMockitoを使用しています。そして、MockitoにはanyString(),anyBoolean()のような多くのマッチャーがあります。私はLoginTypeのインスタンスを渡す必要があるメソッドの引数の一つでMockitoでカスタムマッチャーを作成するには?

列挙LoginType.java

//LoginType.java 
public enum LoginType { 
    FACEBOOK, 
    EMAIL, 
    GOOGLE 
} 

のようなカスタムenumを持っている場合でも、仮定します。明示的にLoginType.FACEBOOKまたはLoginType.GOOGLEを渡すことなく、引数をどのように渡しますか。何かがanyString()のようなものです。その方向へのヒントは役に立ちます。

答えて

1

anyの場合、Java 8ではMatchers.any()を呼び出すだけで十分です。パラメータ型の推論が出てきました。

また、Matchers.any(LoginType.class)を選択することもできます。Matchers.any(LoginType.class)は、Mockito 1.xでは純粋なany()の動作をしますが、Mockito 2.0以降ではタイプチェックが行われます。どちらの場合でも、クラスリテラルを渡すことで、Javaが推論に必要な型情報を取得するのに役立ちます。関連する問題については


  • あなたがジェネリック型、十分なクラスリテラルisn`tをお持ちの場合はどちらか。

    Matchers.<YourContainer<YourType>>any(); 
    

    を...またはあなたがMockito matchers work via side effectsので、一定またはローカル変数の代わりに行う必要があり、静的なヘルパーメソッドに抽出します:あなたは、明示的なメソッドのパラメータとして指定する必要があります

    public static LoginType anyLoginType() { 
        return Matchers.any(); 
    } 
    
  • 最後に、カスタムマッチングロジックを実装する将来の読者のために、Matchers.argThatまたはMockitoHamcrest.argThatを探して、HamcrestスタイルのMatcherオブジェクトをMockitoメソッド呼び出しに適合させます。

関連する問題