ホームページ >Java >&#&チュートリアル >Mockito の @Mock アノテーションと @InjectMocks アノテーションの違いは何ですか?

Mockito の @Mock アノテーションと @InjectMocks アノテーションの違いは何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-25 02:20:18569ブラウズ

What's the Difference Between Mockito's @Mock and @InjectMocks Annotations?

Mockito の @Mock と @InjectMocks の違いを理解する

Java の人気のモック フレームワークである Mockito には、2 つの重要なアノテーションがあります: @モックと @InjectMocks。どちらもモック テストには不可欠ですが、異なる目的を果たします。

@Mock: モックの作成

@Mock は、モック オブジェクトを作成するために使用されます。これは、実際のオブジェクトの偽の実装またはシミュレートされた実装を表します。モックを使用すると、モックの動作を制御し、テスト内での相互作用を主張できます。例:

@Mock
private SomeDependency someDependency;

このコードは、SomeDependency インターフェイスのモックを作成します。その後、このモックをテストで使用できます。

@InjectMocks: モックの注入

対照的に、@InjectMocks は異なる役割を果たします。これは、クラスのインスタンスを作成し、@Mock (または @Spy) アノテーションで作成されたモックをそのインスタンスに注入するために使用されます。これにより、実際のインスタンスを作成せずに、複数のクラスとその依存関係間の相互作用をテストできます。例:

@InjectMocks
private SomeManager someManager;

この場合、someManager は SomeManager クラスのインスタンスです。 @InjectMocks アノテーションは、Mockito に someDependency モックを someManager インスタンスに挿入するように指示します。

初期化と使用上の注意

@InjectMocks を利用するには、@ を使用してモックを初期化する必要があります。 RunWith(MockitoJUnitRunner.class) またはJUnit 4 の場合は Mockito.initMocks(this)、JUnit 5 の場合は @ExtendWith(MockitoExtension.class) です。さらに、@InjectMocks はテスト クラス内で 1 回だけ使用する必要があり、テスト対象のクラスを表すフィールドに配置する必要があることに注意してください。 .

使用例

次の例は、次の方法を示しています。 @Mock と @InjectMocks を使用します:

@RunWith(MockitoJUnitRunner.class)
public class SomeManagerTest {

    @InjectMocks
    private SomeManager someManager;

    @Mock
    private SomeDependency someDependency; // this will be injected into someManager
 
    // tests...
}

このテストでは、someDependency モックが someManager インスタンスに自動的に挿入され、それらの相互作用を効果的にテストできます。

以上がMockito の @Mock アノテーションと @InjectMocks アノテーションの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。