今週Mockito
を使い始めましたが、@InjectMocks
フィールドを理解するのに問題があります。@InjectMocks属性は、Mockitoのメソッドを呼び出すことはできません。
私はこのようなものですクラスAを持っている:
public class A {
public B b;
public C c;
public String string;
}
私はMockito
でJUnit
テストでそれを使用するとき、私はこのようにそれを呼び出す:
@RunWith(MockitoJUnitRunner.class)
public class Test {
@Mock
B b;
@Mock
C c;
@InjectMocks
A a;
...
}
が、私は設定したいです文字列属性!私はこのようにそれを試してみてください。
Mockito.when(a.getString()).thenReturn("STRING");
しかし、テストでは、例外がスローされます。
org.mockito.exceptions.misusing.MissingMethodInvocationException: を()がA」にする必要があり、引数を必要とするときメソッド呼び出しをモック 'と呼びます。例えば、 (mock.getArticles())when then return(articles);
1.最終的な/プライベート/ equals()/ hashCode()メソッドのいずれかをスタブします。これらのメソッドスタブされている/確認することはできません。 2. inside()ではモックでメソッドを呼び出さず、ほかのオブジェクトでメソッドを呼び出します。 3.擬似クラスの親はpublicではありません。モックエンジンの限界です。
このフィールドを設定するために他に何かできますか?
恐ろしい!私はなぜMockitoの例外のこの "答え"でそれをすることができないのか理解できませんでした。説明ありがとう。 – mhery
これはうまくいくかもしれませんが、それはAPIの重大な誤用です。 OPが本当に望んだのは、 "文字列"もある値に設定された非モックインスタンスのAを作成することでした。このような非模倣値を注入することは、Mockitoが現在持っていない(私は思う)機能ですが、それは持つことができ、過去にすでに要求されていました。 –