@TargetSE(valueSE=TYPESE) @RetentionSE(valueSE=RUNTIMESE) @DocumentedSE @InheritedSE public @interface ContextConfiguration
@ContextConfiguration
は、統合テスト用に ApplicationContext
をロードおよび構成する方法を決定するために使用されるクラスレベルのメタデータを定義します。Spring 3.1 以前は、パスベースのリソースの場所(通常は XML 構成ファイル)のみがサポートされていました。Spring 3.1 の通り、コンテキストローダーは、いずれかのパスベースまたはクラスベースのリソースをサポートすることもできます。Spring 4.0.4 以降、コンテキストローダーは、パスベースのリソースとクラスベースのリソースを同時にサポートすることを選択できます。@ContextConfiguration
を使用して、パスベースのリソースの場所(locations()
または value()
属性を介して)またはコンポーネントクラス(classes()
属性を介して)を宣言できます。ただし、SmartContextLoader
のほとんどの実装では、単一のリソース型のみがサポートされることに注意してください。Spring 4.1 以降、パスベースのリソースの場所は、XML 構成ファイルまたは Groovy スクリプトのいずれかになります(Groovy がクラスパス上にある場合)。もちろん、サードパーティのフレームワークは、追加の型のパスベースのリソースをサポートすることを選択できます。
コンポーネントクラスという用語は、次のいずれかを指します。
@Configuration
アノテーションが付けられたクラス @Component
、@Service
、@Repository
などのアノテーションが付けられたクラスです。)javax.inject
アノテーションが付けられた JSR-330 準拠のクラス @Bean
-methods を含むすべてのクラス ApplicationContext
の Spring Bean)として登録することを目的とするその他のクラス。潜在的に Spring アノテーションを使用せずに単一のコンストラクターの自動オートワイヤーを利用します。ApplicationContext
に登録されるため、そのような Bean は他の Bean またはテストクラスのインスタンスに注入できます。 コンポーネントクラスの設定とセマンティクスに関する詳細については、@Configuration
および @Bean
の Javadoc を参照してください。
このアノテーションは、カスタム構成アノテーションを作成するためのメタアノテーションとして使用することができます。
修飾子と型 | オプションの要素と説明 |
---|---|
ClassSE<?>[] | classes ApplicationContext のロードに使用するコンポーネントクラス。 |
boolean | inheritInitializers テストスーパークラスのコンテキストイニシャライザーを継承するかどうか。 |
boolean | inheritLocations リソースの場所またはテストスーパークラスからのコンポーネントクラスを継承する必要があるかどうか。 |
ClassSE<? extends ApplicationContextInitializer<?>>[] | initializers ConfigurableApplicationContext の初期化に使用するアプリケーションコンテキスト初期化子クラス。 |
ClassSE<? extends ContextLoader> | loader |
StringSE[] | locations ApplicationContext のロードに使用するリソースの場所。 |
StringSE | name この構成で表されるコンテキスト階層レベルの名前。 |
StringSE[] | value locations() のエイリアス。 |
@AliasFor(value="locations") public abstract StringSE[] value
locations()
のエイリアス。 この属性は、locations()
と組み合わせて使用することはできませんが、locations()
の代わりに使用することができます。
inheritLocations()
@AliasFor(value="value") public abstract StringSE[] locations
ApplicationContext
のロードに使用するリソースの場所。 特に相対パスの場合に、実行時に場所がどのように解釈されるかについての詳細は、AbstractContextLoader.modifyLocations()
の Javadoc を確認してください。また、指定されていない場合に使用されるデフォルトの場所の詳細については、AbstractContextLoader.generateDefaultLocations()
のドキュメントを参照してください。
前述のデフォルトルールは、locations
が設定されている場合に実行時に使用される効果的なデフォルト実装である GenericXmlContextLoader
や GenericGroovyXmlContextLoader
などの標準 AbstractContextLoader
サブクラスにのみ適用されることに注意してください。デフォルトローダーの詳細については、loader()
のドキュメントを参照してください。
この属性は、value()
と組み合わせて使用することはできませんが、value()
の代わりに使用することができます。
inheritLocations()
public abstract ClassSE<?>[] classes
ApplicationContext
のロードに使用するコンポーネントクラス。 コンポーネントクラスが指定されていない場合のデフォルト構成クラスの検出方法の詳細については、AnnotationConfigContextLoader.detectDefaultConfigurationClasses()
の javadoc を確認してください。デフォルトローダーの詳細については、loader()
のドキュメントを参照してください。
Configuration
, AnnotationConfigContextLoader
, inheritLocations()
public abstract ClassSE<? extends ApplicationContextInitializer<?>>[] initializers
ConfigurableApplicationContext
の初期化に使用するアプリケーションコンテキスト初期化子クラス。 宣言された各イニシャライザーによってサポートされる具体的な ConfigurableApplicationContext
型は、使用中の SmartContextLoader
によって作成された ApplicationContext
の型と互換性がなければなりません。
SmartContextLoader
実装は通常、Spring の Ordered
インターフェースが実装されているかどうか、@Order
アノテーションが存在するかどうかを検出し、呼び出す前にインスタンスをソートします。
ApplicationContextInitializer
, ConfigurableApplicationContext
, inheritInitializers()
, loader()
public abstract 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 { // ... }
public abstract 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 { // ... }
public abstract ClassSE<? extends ContextLoader> loader
ApplicationContext
のロードに使用する SmartContextLoader
(または ContextLoader
)の型。 指定しない場合、ローダーは、@ContextConfiguration
でアノテーションが付けられた、またはメタアノテーションが付けられ、明示的なローダーを指定する最初のスーパークラスから継承されます。階層内に明示的なローダーを指定するクラスがない場合は、代わりにデフォルトのローダーが使用されます。
実行時に選択されるデフォルトの具象実装は、@WebAppConfiguration
の有無に応じて DelegatingSmartContextLoader
または WebDelegatingSmartContextLoader
になります。さまざまな具象 SmartContextLoaders
のデフォルトの動作の詳細については、Javadoc で AbstractContextLoader
、GenericXmlContextLoader
、GenericGroovyXmlContextLoader
、AnnotationConfigContextLoader
、GenericXmlWebContextLoader
、GenericGroovyXmlWebContextLoader
、AnnotationConfigWebContextLoader
を確認してください。
public abstract StringSE name
指定しない場合、名前は、階層内で宣言されたすべてのコンテキスト内の数値レベルに基づいて推測されます。
この属性は、@ContextHierarchy
を使用して構成されたテストクラス階層内で使用される場合にのみ適用できます。この場合、名前は、スーパークラスで定義された階層レベルの同じ名前の構成でこの構成をマージまたはオーバーライドするために使用できます。詳細については、@ContextHierarchy
の Javadoc を参照してください。