web-dev-qa-db-ja.com

Mockito.mock(SomeClass)と@Mockアノテーションの違いは何ですか?

Mockito.mock(Class<T> classToMock)メソッドと@Mockアノテーションの違いは何ですか?彼らは同じですか?

たとえば、これは:

private TestClass test = Mockito.mock(TestClass.class);

と同じ:

@Mock
private TestClass test;
51
Gábor Csikós

どちらも同じ結果を達成します。注釈(_@Mock_)を使用することは、すべて同じように見える定型的な割り当てでコードを埋めないため、通常は「よりクリーン」と見なされます。

_@Mock_注釈を使用するには、テストクラスに@RunWith(MockitoJUnitRunner.class)注釈を付けるか、_@Before_メソッドにMockitoAnnotations.initMocks(this)への呼び出しを含める必要があります。

58
Mureinik

違いは、記述する必要があるコード行にあります:) :) :)

しかし、真剣に、アノテーションを使用すると、Mockito.mockを使用した場合とまったく同じ効果があります。

MockitoAnnotationsのドキュメントを引用するには、注釈の使用には次の利点があります。

  • テストに必要なオブジェクトを簡単に作成できます。

  • 反復的なモック作成コードを最小限にします。

  • テストクラスをより読みやすくします。

  • フィールド名は次のとおりであるため、検証エラーが読みやすくなります。
    モックを識別するために使用されます。

MockitoAnnotationsのjavadocは here です

8
geoand

両方とも同じとみなされ、同じことを達成しますが、2番目の方が望ましいです。

@Mockは以下のアノテーションです。

  • 反復的なモック作成コードを最小限にします。
  • テストクラスをより読みやすくします。
  • テストに必要なオブジェクトを簡単に作成できます。
4
Shweta

注釈を使用することには、2つの重要な利点があります。

  • @Mockで作成されたモックは、@InjectMocksアノテーションを使用して、テストしているクラスに注入できます。これは、テストを大幅に簡単にする強力な手法です。 mockメソッドで作成されたモックでは機能しません。
  • モックに関するエラーがある場合、モックの名前がメッセージに表示されます。 @Mockを使用した場合、この名前はフィールドの名前になります。これにより、問題のモックを簡単に見つけることができます。

もちろん、これらの2つの重要な利点に加えて、ほとんどの人は@Mock表記がはるかに読みやすく、コードの量を削減します。使用しない理由はないと思います。

4

質問の答えは1つの大きな間違いです。フィールドとしてのMockito.mock(Your.class)に起因するいくつかの問題を解決しました。 @Testメソッドはほとんどありませんでした。 4番目のメソッドは、 'thenThrow(ex)'で例外をスローしていました。失敗した@Testメソッドはすべて、理由はスローされた例外でした。彼らは、模擬インスタンスと「いつ」条件を共有していました。から変更した後

TestClass testInstance = Mockito.mock(TestClass.class);

@Mock
TestClass testInstance;

すべてが期待どおりに動作し始めました。したがって、Mockito.mockはテストメソッド間で共有モックを作成しますが、@ Mockは作成しません。

0
saferJo