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 サイトの他の関連記事を参照してください。