2017-02-23 21 views
3

私のプロジェクトでは、Spring FrameworkのMockitoを使用しています。@mock注釈(MockitoのカスタムAnswerクラス付き)

私はこのようなテストケースを持っている:

class SomeTest { 
    @Mock 
    SomeDao dao; 

    @InjectMock 
    TestTarget target; 

    class MyAnswer implements Answer { 
     //some method here 
    } 
} 

私はdao用のカスタム回答クラスMyAnswerを定義します。

注釈がない場合は、Mockito.mock(Dao.class, new MyAnswer())を使用して、MyAnswerを使用してモックオブジェクトを強制的に使用できます。しかし、@Mockアノテーションでは、の内部のパラメータはAnswers.RETURNS_DEFAULTまたはAnswers.RETURNS_MOCKSのようにしか受け入れられません。

daoMyAnswerとなります。@Mock注釈はありますか?

答えて

3

残念ながら、あなたはこれにMockito.mockを使用する必要があります。現在のところ、@Mockを使って書いた答えを指定する方法はありません。

理由はJavaの注釈を行うにはMockito、すべてとはほとんどスペックました:

パラメータは、プリミティブ、文字列、クラス、列挙、注釈、またはのいずれかの配列として入力することができますこれら。 (ジェイソン・ハンター、"Making the Most of Java's Metadata, Part 2: Custom Annotations"

Java Language Specification §9.6.1で:

を:

注釈タイプで宣言されたメソッドの戻り型は、以下のいずれか、またはコンパイル時エラーが発生しなければなりません

  • プリミティブ型
  • ストリング
  • クラスまたはクラスの呼び出し(§4.5)
  • 列挙型
  • 注釈型
  • コンポーネントタイプ先行型(§10.1)の一つである配列型。

注釈型の要素が(列挙値を含むが、任意のインスタンスを除く)を効果的にVM全体の定数でなければなりませんので、あなたが作成した回答のインスタンスを配置する方法はありません。理論的には、Mockitoはという名前のサブクラスを指定させることができましたが、Mockitoもそれをインスタンス化する責任があります。これは常に可能ではなく、実行時の失敗を引き起こします。とにかくこの機能が重要な場合は、feature requestとすることを検討してください。

+0

ありがとうございました。それは正確にJavaの注釈ロジックを理解するのに役立ちます:) – Liyuan

関連する問題