アノテーションインターフェース ContextConfiguration
@ContextConfiguration
は、統合テスト用に ApplicationContext
をロードおよび構成する方法を決定するために使用されるクラスレベルのメタデータを定義します。サポートされているリソース型
コンテキストローダーは、パスベースのリソースの場所 (通常は XML 構成ファイル) またはクラスベースのリソースのいずれかをサポートすることを選択できます。あるいは、コンテキストローダーは、パスベースとクラスベースのリソースを同時にサポートすることを選択できます。@ContextConfiguration
を使用して、パスベースのリソースの場所 (locations()
または value()
属性を使用) またはコンポーネントクラス (classes()
属性を使用) を宣言できます。ただし、SmartContextLoader
のほとんどの実装では、1 つのリソース型しかサポートされないことに注意してください。パスベースのリソースの場所は、XML 構成ファイルまたは Groovy スクリプトのいずれかです (Groovy がクラスパスにある場合)。もちろん、サードパーティのフレームワークは、追加の種類のパスベースのリソースをサポートすることを選択する場合があります。
コンポーネントクラス
コンポーネントクラスという用語は、次のいずれかを指します。
@Configuration
アノテーションが付けられたクラス- コンポーネント (つまり、
@Component
、@Service
、@Repository
などのアノテーションが付けられたクラスです。) jakarta.inject
アノテーションが付けられた JSR-330 準拠のクラス@Bean
-methods を含むすべてのクラス- Spring コンポーネント(つまり、
ApplicationContext
の Spring Bean)として登録することを目的とするその他のクラス。潜在的に Spring アノテーションを使用せずに単一のコンストラクターの自動オートワイヤーを利用します。
ApplicationContext
に登録されるため、そのような Bean は他の Bean またはテストクラスのインスタンスに注入できます。 コンポーネントクラスの設定とセマンティクスに関する詳細については、@Configuration
および @Bean
の Javadoc を参照してください。
このアノテーションは、カスタム構成アノテーションを作成するためのメタアノテーションとして使用することができます。
Spring Framework 5.3 以降、このアノテーションはデフォルトでそれを囲むテストクラスから継承されます。詳細については、@NestedTestConfiguration
を参照してください。
オプション要素のサマリー
修飾子と型オプションの要素説明ClassSE<?>[]
ApplicationContext
のロードに使用するコンポーネントクラス。boolean
テストスーパークラスおよびそれを囲むクラスからのコンテキスト初期化子を継承する必要があるかどうか。boolean
テストスーパークラスおよびエンクロージングクラスからのリソースの場所またはコンポーネントクラスを継承するかどうか。ClassSE<? extends ApplicationContextInitializer<?>>[]
ConfigurableApplicationContext
の初期化に使用するアプリケーションコンテキスト初期化子クラス。ClassSE<? extends ContextLoader>
StringSE[]
ApplicationContext
のロードに使用するリソースの場所。この構成で表されるコンテキスト階層レベルの名前。StringSE[]
locations()
のエイリアス。
要素の詳細
value
locations()
のエイリアス。この属性は、
locations()
と組み合わせて使用することはできませんが、locations()
の代わりに使用することができます。- 導入:
- 3.0
- 関連事項:
- デフォルト:
- {}
locations
ApplicationContext
のロードに使用するリソースの場所。特に相対パスの場合に、実行時に場所がどのように解釈されるかについての詳細は、
AbstractContextLoader.modifyLocations()
の Javadoc を確認してください。また、指定されていない場合に使用されるデフォルトの場所の詳細については、AbstractContextLoader.generateDefaultLocations()
のドキュメントを参照してください。前述のデフォルトルールは、
locations
が設定されている場合に実行時に使用される効果的なデフォルト実装であるGenericXmlContextLoader
やGenericGroovyXmlContextLoader
などの標準AbstractContextLoader
サブクラスにのみ適用されることに注意してください。デフォルトローダーの詳細については、loader()
のドキュメントを参照してください。この属性は、
value()
と組み合わせて使用することはできませんが、value()
の代わりに使用することができます。- 導入:
- 2.5
- 関連事項:
- デフォルト:
- {}
classes
ClassSE<?>[] classesApplicationContext
のロードに使用するコンポーネントクラス。コンポーネントクラスが指定されていない場合のデフォルト構成クラスの検出方法の詳細については、
AnnotationConfigContextLoader.detectDefaultConfigurationClasses()
の javadoc を確認してください。デフォルトローダーの詳細については、loader()
のドキュメントを参照してください。- デフォルト:
- {}
initializers
ClassSE<? extends ApplicationContextInitializer<?>>[] initializersConfigurableApplicationContext
の初期化に使用するアプリケーションコンテキスト初期化子クラス。宣言された各イニシャライザーによってサポートされる具体的な
ConfigurableApplicationContext
型は、使用中のSmartContextLoader
によって作成されたApplicationContext
の型と互換性がなければなりません。SmartContextLoader
実装は通常、Spring のOrdered
インターフェースが実装されているかどうか、@Order
アノテーションが存在するかどうかを検出し、呼び出す前にインスタンスをソートします。- 導入:
- 3.2
- 関連事項:
- デフォルト:
- {}
inheritLocations
boolean inheritLocationsテストスーパークラスおよびエンクロージングクラスからのリソースの場所またはコンポーネントクラスを継承するかどうか。デフォルト値は
true
です。これは、アノテーション付きのテストクラスが、テストスーパークラスとそれを囲むクラスによって定義されたリソースの場所またはコンポーネントクラスを継承することを意味します。具体的には、特定のテストクラスのリソースの場所またはコンポーネントクラスが、テストスーパークラスおよびそれを囲むクラスによって定義されたリソースの場所またはコンポーネントクラスのリストに追加されます。サブクラスとネストされたクラスには、リソースの場所またはコンポーネントクラスのリストを拡張するオプションがあります。inheritLocations
がfalse
に設定されている場合、アノテーション付きテストクラスのリソースの場所またはコンポーネントクラスは、スーパークラスおよびそれを囲むクラスによって定義されたリソースの場所またはコンポーネントクラスをシャドウイングして効果的に置き換えます。パスベースのリソースロケーションを使用する次の例では、
ExtendedTest
のApplicationContext
が"base-context.xml"
および"extended-context.xml"
からこの順序でロードされます。"extended-context.xml"
で定義された Bean は、"base-context.xml"
で定義された Bean をオーバーライドできます。@ContextConfiguration("base-context.xml") public class BaseTest { // ... } @ContextConfiguration("extended-context.xml") public class ExtendedTest extends BaseTest { // ... }
同様に、コンポーネントクラスを使用する次の例では、
ExtendedTest
のApplicationContext
がBaseConfig
およびExtendedConfig
構成クラスからこの順序でロードされます。ExtendedConfig
で定義された Bean は、BaseConfig
で定義された Bean をオーバーライドできます。@ContextConfiguration(classes=BaseConfig.class) public class BaseTest { // ... } @ContextConfiguration(classes=ExtendedConfig.class) public class ExtendedTest extends BaseTest { // ... }
- 導入:
- 2.5
- デフォルト:
- true
inheritInitializers
boolean inheritInitializersテストスーパークラスおよびそれを囲むクラスからのコンテキスト初期化子を継承する必要があるかどうか。デフォルト値は
true
です。これは、アノテーション付きのテストクラスが、テストスーパークラスとそれを囲むクラスによって定義されたアプリケーションコンテキスト初期化子を継承することを意味します。具体的には、特定のテストクラスの初期化子は、テストスーパークラスとそれを囲むクラスによって定義された初期化子のセットに追加されます。サブクラスとネストされたクラスには、初期化子のセットを拡張するオプションがあります。inheritInitializers
がfalse
に設定されている場合、アノテーション付きテストクラスの初期化子はシャドウになり、スーパークラスとそれを囲むクラスによって定義された初期化子を効果的に置き換えます。次の例では、
ExtendedTest
のApplicationContext
は、BaseInitializer
およびExtendedInitializer
を使用して初期化されます。ただし、イニシャライザーが呼び出される順序は、イニシャライザーがOrdered
を実装しているか、@Order
でアノテーションが付けられているかによって異なることに注意してください。@ContextConfiguration(initializers = BaseInitializer.class) public class BaseTest { // ... } @ContextConfiguration(initializers = ExtendedInitializer.class) public class ExtendedTest extends BaseTest { // ... }
- 導入:
- 3.2
- デフォルト:
- true
loader
ClassSE<? extends ContextLoader> loaderApplicationContext
のロードに使用するSmartContextLoader
(またはContextLoader
)の型。指定しない場合、ローダーは、
@ContextConfiguration
でアノテーションが付けられた、またはメタアノテーションが付けられ、明示的なローダーを指定する最初のスーパークラスまたはそれを囲むクラスから継承されます。型階層またはそれを囲むクラス階層に明示的なローダーが指定されていない場合は、代わりにデフォルトのローダーが使用されます。実行時に選択されるデフォルトの具象実装は、
@WebAppConfiguration
の有無に応じてDelegatingSmartContextLoader
またはWebDelegatingSmartContextLoader
になります。さまざまな具象SmartContextLoaders
のデフォルトの動作の詳細については、Javadoc でAbstractContextLoader
、GenericXmlContextLoader
、GenericGroovyXmlContextLoader
、AnnotationConfigContextLoader
、GenericXmlWebContextLoader
、GenericGroovyXmlWebContextLoader
、AnnotationConfigWebContextLoader
を確認してください。- 導入:
- 2.5
- デフォルト:
- org.springframework.test.context.ContextLoader.class
name
StringSE nameこの構成で表されるコンテキスト階層レベルの名前。指定しない場合、名前は、階層内で宣言されたすべてのコンテキスト内の数値レベルに基づいて推測されます。
この属性は、
@ContextHierarchy
を使用して構成されたテストクラス階層または囲みクラス階層内で使用される場合にのみ適用されます。この場合、この名前は、スーパークラスまたは囲みで定義された階層レベルの同じ名前の構成とこの構成をマージまたはオーバーライドするために使用できます。クラス。詳細については、@ContextHierarchy
の Javadoc を参照してください。- 導入:
- 3.2.2
- デフォルト:
- ""