@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Inherited
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 を含むその他のクラス アノテーション付きクラスの構成とセマンティクスの詳細については、@Configuration
および @Bean
の Javadoc を参照してください。
Spring Framework 4.0 以降、このアノテーションをメタアノテーションとして使用して、カスタム合成アノテーションを作成できます。
ContextHierarchy
, ActiveProfiles
, TestPropertySource
, ContextLoader
, SmartContextLoader
, ContextConfigurationAttributes
, MergedContextConfiguration
, ApplicationContext
修飾子と型 | オプションの要素と説明 |
---|---|
java.lang.Class<?>[] | classes ApplicationContext のロードに使用するアノテーション付きクラス。 |
boolean | inheritInitializers テストスーパークラスのコンテキストイニシャライザーを継承するかどうか。 |
boolean | inheritLocations resource locations またはテストスーパークラスのアノテーション付きクラスを継承するかどうか。 |
java.lang.Class<? extends ApplicationContextInitializer<?>>[] | initializers ConfigurableApplicationContext の初期化に使用するアプリケーションコンテキスト初期化子クラス。 |
java.lang.Class<? extends ContextLoader> | loader |
java.lang.String[] | locations ApplicationContext のロードに使用するリソースの場所。 |
java.lang.String | name この構成で表されるコンテキスト階層レベルの名前。 |
java.lang.String[] | value locations() のエイリアス。 |
@AliasFor(value="locations") public abstract java.lang.String[] value
locations()
のエイリアス。 この属性は、locations()
と組み合わせて使用することはできませんが、locations()
の代わりに使用することができます。
inheritLocations()
@AliasFor(value="value") public abstract java.lang.String[] locations
ApplicationContext
のロードに使用するリソースの場所。 特に相対パスの場合に、実行時に場所がどのように解釈されるかについての詳細は、AbstractContextLoader.modifyLocations()
の Javadoc を確認してください。また、指定されていない場合に使用されるデフォルトの場所の詳細については、AbstractContextLoader.generateDefaultLocations()
のドキュメントを参照してください。
前述のデフォルトルールは、locations
が設定されている場合に実行時に使用される効果的なデフォルト実装である GenericXmlContextLoader
や GenericGroovyXmlContextLoader
などの標準 AbstractContextLoader
サブクラスにのみ適用されることに注意してください。デフォルトローダーの詳細については、loader()
のドキュメントを参照してください。
この属性は、value()
と組み合わせて使用することはできませんが、value()
の代わりに使用することができます。
inheritLocations()
public abstract java.lang.Class<?>[] classes
ApplicationContext
のロードに使用するアノテーション付きクラス。 アノテーション付きクラスが指定されていない場合にデフォルトの構成クラスがどのように検出されるかについて詳しくは、AnnotationConfigContextLoader.detectDefaultConfigurationClasses()
の javadoc を確認してください。デフォルトローダーの詳細については、loader()
のドキュメントを参照してください。
Configuration
, AnnotationConfigContextLoader
, inheritLocations()
public abstract java.lang.Class<? extends ApplicationContextInitializer<?>>[] initializers
ConfigurableApplicationContext
の初期化に使用するアプリケーションコンテキスト初期化子クラス。 宣言された各イニシャライザーによってサポートされる具体的な ConfigurableApplicationContext
型は、使用中の SmartContextLoader
によって作成された ApplicationContext
の型と互換性がなければなりません。
SmartContextLoader
実装は通常、Spring の Ordered
インターフェースが実装されているかどうか、@Order
アノテーションが存在するかどうかを検出し、呼び出す前にインスタンスをソートします。
ApplicationContextInitializer
, ConfigurableApplicationContext
, inheritInitializers()
, loader()
public abstract boolean inheritLocations
resource locations
またはテストスーパークラスのアノテーション付きクラスを継承するかどうか。 デフォルト値は 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 java.lang.Class<? extends ContextLoader> loader
ApplicationContext
のロードに使用する SmartContextLoader
(または ContextLoader
)の型。 指定しない場合、ローダーは @ContextConfiguration
でアノテーションが付けられ、明示的なローダーを指定する最初のスーパークラスから継承されます。階層内のクラスが明示的なローダーを指定していない場合は、代わりにデフォルトのローダーが使用されます。
実行時に選択されるデフォルトの具象実装は、@WebAppConfiguration
の有無に応じて DelegatingSmartContextLoader
または WebDelegatingSmartContextLoader
になります。さまざまな具象 SmartContextLoaders
のデフォルトの動作の詳細については、Javadoc で AbstractContextLoader
、GenericXmlContextLoader
、GenericGroovyXmlContextLoader
、AnnotationConfigContextLoader
、GenericXmlWebContextLoader
、GenericGroovyXmlWebContextLoader
、AnnotationConfigWebContextLoader
を確認してください。
public abstract java.lang.String name
指定しない場合、名前は、階層内で宣言されたすべてのコンテキスト内の数値レベルに基づいて推測されます。
この属性は、@ContextHierarchy
を使用して構成されたテストクラス階層内で使用される場合にのみ適用できます。この場合、名前は、スーパークラスで定義された階層レベルの同じ名前の構成でこの構成をマージまたはオーバーライドするために使用できます。詳細については、@ContextHierarchy
の Javadoc を参照してください。