テストでの Bean のオーバーライド
テストでの Bean オーバーライドとは、テストクラスまたはテストクラス内の 1 つ以上の非静的フィールドにアノテーションを付けることで、テストクラスの ApplicationContext 内の特定の Bean をオーバーライドする機能を指します。
この機能は、DefaultListableBeanFactory setAllowBeanDefinitionOverriding フラグを true に設定して @Bean 経由で Bean を登録する方法よりもリスクの少ない代替手段として意図されています。 |
Spring TestContext フレームワークは、Bean オーバーライド用のアノテーションを 2 セット提供します。
前者は純粋に Spring に依存し、後者のセットは Mockito (英語) サードパーティライブラリに依存します。
カスタム Bean オーバーライドサポート
上記の 3 つのアノテーションは、@BeanOverride メタアノテーションと関連インフラストラクチャに基づいて構築されており、カスタム Bean オーバーライドバリアントを定義できます。
カスタム Bean オーバーライドサポートを実装するには、次のものが必要です。
使用する
BeanOverrideProcessorを定義する@BeanOverrideでアノテーションされたアノテーションメタカスタム
BeanOverrideProcessor実装プロセッサーによって作成された 1 つ以上の具体的な
BeanOverrideHandler実装
Spring TestContext フレームワークには、Bean オーバーライドをサポートし、インフラストラクチャの残りの部分を設定する次の API の実装が含まれています。
BeanFactoryPostProcessorContextCustomizerFactoryTestExecutionListener
spring-test モジュールは、後者の 2 つ (BeanOverrideContextCustomizerFactory と BeanOverrideTestExecutionListener) の実装を META-INF/spring.factories プロパティファイル [GitHub] (英語) に登録します。
Bean オーバーライドインフラストラクチャは、テストクラスのアノテーションと、@BeanOverride でメタアノテーションされたテストクラス内の非静的フィールドのアノテーションを検索し、適切な BeanOverrideHandler を作成するための対応する BeanOverrideProcessor をインスタンス化します。
次に、内部の BeanOverrideBeanFactoryPostProcessor は Bean オーバーライドハンドラーを使用して、対応する BeanOverrideStrategy で定義されているように Bean を作成、置換、ラップすることにより、テストの ApplicationContext を変更します。
REPLACEBean を置き換えます。対応する Bean が存在しない場合は例外をスローします。
REPLACE_OR_CREATEBean が存在する場合は置き換えます。対応する Bean が存在しない場合は、新しい Bean を作成します。
WRAPオリジナルの Bean を取り出し、折り返しします。
非シングルトン Bean を置き換える場合、非シングルトン Bean は、該当する
|
Spring のオートワイヤーメカニズム (たとえば、 通常、Bean は
|