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


@TargetSE({FIELDSE,TYPESE}) @RetentionSE(RUNTIMESE) @DocumentedSE @RepeatableSE(MockitoSpyBeans.class) @BeanOverride(org.springframework.test.context.bean.override.mockito.MockitoBeanOverrideProcessor.class) public @interface MockitoSpyBean
@MockitoSpyBean は、テストクラスで使用できるアノテーションであり、テストの ApplicationContext 内の Bean を、元の Bean インスタンスをラップする Mockito スパイでオーバーライドします。

@MockitoSpyBean は次のように適用できます。

  • テストクラスまたはそのスーパークラスの非静的フィールド。
  • @Nested テストクラスの包含クラス内の非静的フィールド、または @Nested テストクラスの上位の型階層または包含クラス階層内の任意のクラス。
  • テストクラスの型レベル、またはテストクラスの上位の型階層内の任意のスーパークラスまたは実装されたインターフェース。
  • @Nested テストクラスの包含クラスの型レベル、または @Nested テストクラスの上位の型階層または包含クラス階層内の任意のクラスまたはインターフェース。

フィールドで @MockitoSpyBean が宣言されている場合、スパイする Bean はアノテーション付きフィールドの型から推論されます。ApplicationContext に複数の候補が存在する場合は、曖昧さを解消するために、フィールドに @Qualifier アノテーションを宣言できます。@Qualifier アノテーションがない場合、アノテーション付きフィールドの名前がフォールバック修飾子として使用されます。または、value または name 属性を設定することで、スパイする Bean 名を明示的に指定できます。Bean 名が指定されている場合は、その名前のターゲット Bean がアプリケーションコンテキストに事前に登録されている必要があります。

@MockitoSpyBean が型 レベルで宣言されている場合、スパイする Bean (または Bean) の型は、types 属性を介して指定する必要があります。ApplicationContext に複数の候補が存在する場合は、name 属性を設定することで、スパイする Bean 名を明示的に指定できます。ただし、明示的な Bean name が構成されている場合、types 属性には単一の型が含まれている必要があることに注意してください。

アプリケーションコンテキストに認識されているが Bean ではないコンポーネント (たとえば、解決可能な依存関係としてのコンポーネント registered directly) に対しては、スパイを作成することはできません。

警告 @MockitoSpyBean を @ContextHierarchy と組み合わせて使用すると、各 @MockitoSpyBean がデフォルトですべてのコンテキスト階層レベルに適用されるため、望ましくない結果が生じる可能性があります。特定の @MockitoSpyBean が単一のコンテキスト階層レベルに適用されるようにするには、contextName を、設定された @ContextConfiguration name と一致するように設定してください。詳細と例については、@ContextHierarchy の Javadoc を参照してください。

注意 : スパイできるのはシングルトン Bean のみです。非シングルトン Bean のスパイを作成しようとすると、例外が発生します。FactoryBean のスパイを作成すると、FactoryBean 自体ではなく、FactoryBean によって作成されたオブジェクトに対してスパイが作成されます。

@MockitoSpyBean フィールドの可視性に制限はありません。このようなフィールドは、プロジェクトのニーズやコーディング方法に応じて、publicprotected、パッケージプライベート (デフォルトの可視性)、または private になります。

@MockitoSpyBean フィールドと型レベルの @MockitoSpyBean 宣言は、デフォルトで、囲んでいるテストクラスから継承されます。詳細については、@NestedTestConfiguration を参照してください。

@MockitoSpyBean は、カスタム合成アノテーションを作成するためのメタアノテーションとして使用できます。たとえば、テストスイート全体で再利用できる単一のアノテーションで共通のスパイ構成を定義することができます。@MockitoSpyBean は、型レベルで繰り返し可能なSEアノテーションとして使用することもできます。たとえば、name で複数の Bean をスパイすることができます。

導入:
6.2
作成者:
Simon Basl é , Sam Brannen
関連事項:
  • オプション要素の概要

    オプション要素
    修飾子と型
    オプションの要素
    説明
    この @MockitoSpyBean を適用するコンテキスト階層レベルの名前。
    スパイする Bean の名前。
    スパイされた Bean に適用するリセットモード。
    ClassSE<?>[]
    スパイする 1 つ以上の型。
    name のエイリアス。
  • 要素の詳細

    • value

      @AliasFor("name") StringSE value
      name のエイリアス。

      他の属性が必要ない場合に使用することを目的としています (例: @MockitoSpyBean("customBeanName"))。

      関連事項:
      デフォルト:
      ""
    • name

      @AliasFor("value") StringSE name
      スパイする Bean の名前。

      指定しない場合は、監視する Bean は、構成された types またはアノテーション付きフィールドの型に従って選択され、必要に応じて修飾子が考慮されます。詳細については、クラスレベルのドキュメントを参照してください。

      関連事項:
      デフォルト:
      ""
    • types

      ClassSE<?>[] types
      スパイする 1 つ以上の型。

      デフォルトはなしです。

      指定された各型により、スパイが作成され、ApplicationContext に登録されます。

      フィールドでアノテーションを使用する場合は、型を省略する必要があります。

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

      戻り値:
      スパイする型
      導入:
      6.2.3
      デフォルト:
      {}
    • contextName

      StringSE contextName
      この @MockitoSpyBean を適用するコンテキスト階層レベルの名前。

      デフォルトでは空の文字列に設定され、この @MockitoSpyBean をすべてのアプリケーションコンテキストに適用する必要があることを示します。

      コンテキスト名が設定されている場合、@ContextConfiguration(name=...) を介して設定された名前と一致する必要があります。

      導入:
      6.2.6
      関連事項:
      デフォルト:
      ""
    • reset

      MockReset reset
      スパイされた Bean に適用するリセットモード。

      デフォルトは MockReset.AFTER です。これは、各テストメソッドが呼び出された後にスパイが自動的にリセットされることを意味します。

      戻り値:
      リセットモード
      デフォルト:
      AFTER