Mockito.mock(Class<T> classToMock)
メソッドと@Mock
アノテーションの違いは何ですか?彼らは同じですか?
たとえば、これは:
private TestClass test = Mockito.mock(TestClass.class);
と同じ:
@Mock
private TestClass test;
どちらも同じ結果を達成します。注釈(_@Mock
_)を使用することは、すべて同じように見える定型的な割り当てでコードを埋めないため、通常は「よりクリーン」と見なされます。
_@Mock
_注釈を使用するには、テストクラスに@RunWith(MockitoJUnitRunner.class)
注釈を付けるか、_@Before
_メソッドにMockitoAnnotations.initMocks(this)
への呼び出しを含める必要があります。
違いは、記述する必要があるコード行にあります:) :) :)
しかし、真剣に、アノテーションを使用すると、Mockito.mockを使用した場合とまったく同じ効果があります。
MockitoAnnotations
のドキュメントを引用するには、注釈の使用には次の利点があります。
テストに必要なオブジェクトを簡単に作成できます。
反復的なモック作成コードを最小限にします。
テストクラスをより読みやすくします。
フィールド名は次のとおりであるため、検証エラーが読みやすくなります。
モックを識別するために使用されます。
MockitoAnnotations
のjavadocは here です
両方とも同じとみなされ、同じことを達成しますが、2番目の方が望ましいです。
@Mockは以下のアノテーションです。
注釈を使用することには、2つの重要な利点があります。
@Mock
で作成されたモックは、@InjectMocks
アノテーションを使用して、テストしているクラスに注入できます。これは、テストを大幅に簡単にする強力な手法です。 mock
メソッドで作成されたモックでは機能しません。@Mock
を使用した場合、この名前はフィールドの名前になります。これにより、問題のモックを簡単に見つけることができます。もちろん、これらの2つの重要な利点に加えて、ほとんどの人は@Mock
表記がはるかに読みやすく、コードの量を削減します。使用しない理由はないと思います。
質問の答えは1つの大きな間違いです。フィールドとしてのMockito.mock(Your.class)に起因するいくつかの問題を解決しました。 @Testメソッドはほとんどありませんでした。 4番目のメソッドは、 'thenThrow(ex)'で例外をスローしていました。失敗した@Testメソッドはすべて、理由はスローされた例外でした。彼らは、模擬インスタンスと「いつ」条件を共有していました。から変更した後
TestClass testInstance = Mockito.mock(TestClass.class);
に
@Mock
TestClass testInstance;
すべてが期待どおりに動作し始めました。したがって、Mockito.mockはテストメソッド間で共有モックを作成しますが、@ Mockは作成しません。