「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > junit テストでの @spy アノテーションの使用

junit テストでの @spy アノテーションの使用

2024 年 8 月 14 日に公開
ブラウズ:512

Uses of @spy annotation in junit testing

JUnit の @Spy アノテーションは、特に Mockito とともに使用する場合、実際のオブジェクトにスパイを作成するために適用されます。スパイは部分モックです。これは、他のメソッドの実際の動作を保持しながら、オブジェクトの一部のメソッドをモックできることを意味します。

@Spy アノテーションの一般的な使用法をいくつか示します:

  1. 部分モッキング:

    • ほとんどのメソッドが実際の動作を保持する必要があるが、1 つまたは 2 つのメソッドをモックする必要があるオブジェクトがある場合は、スパイを使用できます。
    • 例:
     @Spy
     private List spyList = new ArrayList();
    
     @Test
     public void testSpy() {
         spyList.add("Mockito");
         Mockito.verify(spyList).add("Mockito");
         assertEquals(1, spyList.size());
    
         Mockito.doReturn(100).when(spyList).size();
         assertEquals(100, spyList.size());
     }
    
  2. 実際のメソッドの動作のオーバーライド:

    • スパイを使用すると、残りのメソッドはそのままにしながら、実際のオブジェクトの特定のメソッドの動作をオーバーライドできます。
    • 例:
     @Spy
     private MyClass myClass = new MyClass();
    
     @Test
     public void testSpyWithMethodOverride() {
         Mockito.doReturn("Mocked Value").when(myClass).someMethod();
         assertEquals("Mocked Value", myClass.someMethod());
     }
    
  3. メソッド呼び出しの検証:

    • スパイ上で特定のメソッドが呼び出されたかどうかを確認できます。これは、インタラクションをテストするときに役立ちます。
    • 例:
     @Spy
     private MyClass myClass = new MyClass();
    
     @Test
     public void testMethodCallVerification() {
         myClass.someMethod();
         Mockito.verify(myClass).someMethod();
     }
    
  4. @InjectMocks との組み合わせ:

    • @Spy を @InjectMocks と組み合わせて使用​​すると、スパイ対象のオブジェクトをテスト対象のオブジェクトに挿入でき、テスト対象のクラス内で部分的なモックが可能になります。
    • 例:
     @Spy
     private MyDependency dependency;
    
     @InjectMocks
     private MyService service;
    
     @Test
     public void testService() {
         Mockito.doReturn("Mocked Result").when(dependency).doSomething();
         assertEquals("Mocked Result", service.performAction());
     }
    
  5. レガシー コードをテストしています:

    • 簡単にリファクタリングできないレガシー コードを扱う場合、スパイを使用すると、元のコードを変更せずに特定のメソッドを分離してモックできます。

要約すると、@Spy アノテーションは、オブジェクトの残りの動作を変更せずに、実際のオブジェクトの特定の動作を制御または検証する必要がある場合に役立ちます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/shivam_tyagi/uses-of-spy-annotation-in-junit-testing-23n6?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3