2017-02-23 9 views
1

深いスタブである@InjectMockmocksを注入できますか?深いスタブで各モックを定義する必要がありますか?深いスタブで注釈を付ける目的でのみ、未使用フィールドを定義するのは不便です。@Mockフィールドを定義せずに深いスタブを@InjectMockできますか?

例:どこにも使用されていないため、注入を定義することなくこれを行う方法はありますか?

@InjectMocks 
private Object testMe; 

@Mock (answer = Answers.RETURNS_DEEP_STUBS) 
private Object injected; 

答えて

0

いいえ、できません。また、警告ラベルの楽しい品揃えを積み重ねている:

  • RETURNS_DEEP_STUBSから:

    WARNING:この機能はほとんど通常のクリーンなコードのために必要とされるべきでありません!レガシーコードのままにしておきます。デモータの法則に違反して何か意味のあるヒントを返すか、価値オブジェクト(よく知られている反パターン)を嘲笑するために、モックを返すためのモックを嘲笑して、モックを返す(...)。

    いいえ見積もり私はウェブでいつでも見ました:モックがモックを返すたびに、フェアリーが死ぬ@InjectMocksから

  • Mockitoを順に、下記のようにコンストラクタインジェクション、セッタ注入、またはプロパティ注射によっていずれか一方のみモックを注入しようとします。次のいずれかの戦略が失敗した場合、は失敗を報告しません;つまり、自分で依存関係を提供する必要があります。

    コンストラクタインジェクション;最大のコンストラクタが選択された場合、引数はテストでのみ宣言されたモックで解決されます。オブジェクトがコンストラクタで正常に作成された場合、Mockitoは他の戦略を試しません。 Mockitoは、パラメータ化されたコンストラクタを持っていればオブジェクトを壊さないことに決めました。嘲笑対

自動深いスタブとInjectMocksを可能にすることによって、あなたはあなたが実際に使用した注射スタイルとフィールドの人口についての理由に非常に難しいそれを見つけると、あなたのテストの部分も本物です。これにより、テスト中のシステムから直接取得したり、実際のコードとテストコードの境界を壊したりする可能性のある値をスタブしたり、検証したりすることができなくなります。

要するに、答えは「いいえ」です。より長い答えは、リファクタリングに適切な依存性注入アクセスを含めることを検討し、現在の違反を避けることです。

関連する問題