mockito
は、2つのフィールドのタイプが同じであれば、タイプによってモックを挿入する方法を知らない場合があります。だからそれは名前で注入しようとします。この場合、テスト対象のクラスのフィールドの名前が、作成したモックオブジェクトと一致しないように見えます。
フィールド注入;ここ はdoc@InjectMocks
するためのものですモックは最初にタイプ別に解決されます( )。 には、同じタイプのいくつかのプロパティがあり、フィールド の名前とモック名が一致すると、タイプ一致のインジェクションが実行されます。
あなたの提出の名前を変更するか、明示的なモックの名前を使用することができ、次のいずれか
@Mock(name="foo")
private Map<String, Integer> map1;
@Mock(name="bar")
private Map<String, Date> map2;
しかし、私はこれが最善の解決策であるとは思いません。ファイル名が変更された場合、偽陰性のテスト結果が得られます。機能は正しく動作しますが、テストは失敗します。
私にとっては、テストするクラスがコンストラクタ内の依存関係を受け取るように、コードをリファクタリングすることをお勧めします。その後、あなたはこのようにそれを模擬することができますでも
@Mock
private Map<String, Integer> map1;
@Mock
private Map<String, Date> map2;
private ClassUnderTets cut;
@Before
public void setUp() throws Exception {
cut = new ClassUnderTets(map1, map2);
}
または:
@Mock
private Map<String, Integer> map1;
@Mock
private Map<String, Date> map2;
@InjectMocks
private ClassUnderTets cut;
をドキュメントで述べたように:
コンストラクタ・インジェクション。最大のコンストラクタは引数がのみ
作品私のために。 Mockito ver 1.10.19。あなたが私たちに見せない何かがありますか? – Michael