アノテーションインターフェース SpyBean


Mockito スパイを Spring ApplicationContext に適用するために使用できるアノテーション。クラスレベルのアノテーションとして、または @Configuration クラス、または @RunWith である SpringRunner であるテストクラスのフィールドで使用できます。

スパイは、型または bean name によって適用できます。一致する型(サブクラスを含む)のコンテキスト内のすべての Bean は、スパイでラップされます。既存の Bean が定義されていない場合は、新しい Bean が追加されます。アプリケーションコンテキストには認識されているが Bean ではない依存関係(registered directly など)は検出されず、スパイされた Bean が既存の依存関係とともにコンテキストに追加されます。

@SpyBean がフィールドで使用され、アプリケーションコンテキストに登録されると、スパイもフィールドに挿入されます。一般的な使用箇所は次のとおりです。

 @RunWith(SpringRunner.class)
 public class ExampleTests {

     @SpyBean
     private ExampleService service;

     @Autowired
     private UserOfService userOfService;

     @Test
     public void testUserOfService() {
         String actual = this.userOfService.makeUse();
         assertEquals("Was: Hello", actual);
         verify(this.service).greet();
     }

     @Configuration
     @Import(UserOfService.class) // A @Component injected with ExampleService
     static class Config {
     }


 }
 
リクエストされた型の Bean が複数ある場合、フィールドレベルで修飾子メタデータを指定する必要があります。
 @RunWith(SpringRunner.class)
 public class ExampleTests {

     @SpyBean
     @Qualifier("example")
     private ExampleService service;

     ...
 }
 

このアノテーションは @Repeatable であり、Java 8 での作業時に複数回指定するか、@SpyBeans アノテーション内に含めることができます。

導入:
1.4.0
作成者:
Phillip Webb
関連事項:
  • オプション要素のサマリー

    オプション要素
    修飾子と型
    オプションの要素
    説明
    ClassSE<?>[]
    スパイするクラス。
    スパイする Bean の名前。
    boolean
    verify(mock) などの Mockito メソッドは、プロキシ自体ではなく、AOP 推奨の Bean の target を使用する必要があることを示します。
    スパイされた Bean に適用するリセットモード。
    ClassSE<?>[]
    スパイするクラス。
  • 要素の詳細

    • name

      StringSE name
      スパイする Bean の名前。指定しない場合、名前が生成されるか、スパイが既存の Bean の場合は、既存の名前が使用されます。
      戻り値:
      Bean の名前
      デフォルト:
      ""
    • value

      @AliasFor("classes") ClassSE<?>[] value
      スパイするクラス。これは classes() のエイリアスであり、他の属性が定義されていない場合に簡潔にするために使用できます。詳細については、classes() を参照してください。
      戻り値:
      スパイするクラス
      デフォルト:
      {}
    • classes

      @AliasFor("value") ClassSE<?>[] classes
      スパイするクラス。ここで指定された各クラスにより、スパイが適用されます。アノテーションがフィールドで使用される場合、クラスは省略できます。

      @SpyBean が name も定義する場合、この属性には単一の値のみを含めることができます。

      これが唯一の指定された属性である場合、代わりに value エイリアスの使用を検討してください。

      戻り値:
      スパイするクラス
      デフォルト:
      {}
    • reset

      MockReset reset
      スパイされた Bean に適用するリセットモード。デフォルトは MockReset.AFTER で、各テストメソッドが呼び出されるとスパイが自動的にリセットされます。
      戻り値:
      リセットモード
      デフォルト:
      AFTER
    • proxyTargetAware

      boolean proxyTargetAware
      verify(mock) などの Mockito メソッドは、プロキシ自体ではなく、AOP 推奨の Bean の target を使用する必要があることを示します。false に設定した場合、Mockito メソッドを呼び出すときに AopTestUtils.getUltimateTargetObject(...) の結果を使用する必要がある場合があります。
      戻り値:
      AOP アドバイス Bean のターゲットが使用されている場合は true、プロキシが直接使用されている場合は false 
      デフォルト:
      true