ホームページ  >  記事  >  Java  >  junit テストでの @spy アノテーションの使用

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

WBOY
WBOYオリジナル
2024-08-12 18:49:52340ブラウズ

Uses of @spy annotation in junit testing

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

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

  1. 部分的なモック:

    • ほとんどのメソッドが実際の動作を保持する必要があるが、1 つまたは 2 つのメソッドをモックする必要があるオブジェクトがある場合は、スパイを使用できます。
    • 例:
     @Spy
     private List<String> 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 アノテーションは、オブジェクトの残りの動作を変更せずに、実際のオブジェクトの特定の動作を制御または検証する必要がある場合に役立ちます。

以上がjunit テストでの @spy アノテーションの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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