コンテキスト設定の継承
@ContextConfiguration
は、ブール型 inheritLocations
および inheritInitializers
属性をサポートします。これらの属性は、リソースの場所またはコンポーネントクラス、およびスーパークラスによって宣言されたコンテキスト初期化子を継承する必要があるかどうかを示します。両方のフラグのデフォルト値は true
です。つまり、テストクラスは、リソースの場所またはコンポーネントクラス、およびスーパークラスによって宣言されたコンテキスト初期化子を継承します。具体的には、テストクラスのリソースの場所またはコンポーネントクラスは、スーパークラスによって宣言されたリソースの場所またはアノテーション付きクラスのリストに追加されます。同様に、特定のテストクラスの初期化子は、テストスーパークラスによって定義された初期化子のセットに追加されます。サブクラスには、リソースの場所、コンポーネントクラス、コンテキスト初期化子を継承するオプションがあります。
@ContextConfiguration
の inheritLocations
または inheritInitializers
属性が false
に設定されている場合、テストクラスシャドウのリソースの場所またはコンポーネントクラスとコンテキスト初期化子はそれぞれ、スーパークラスによって定義された構成を効果的に置き換えます。
Spring Framework 5.3 以降、テスト構成は、囲んでいるクラスから継承することもできます。詳細については、@Nested テストクラスの構成を参照してください。 |
XML リソースの場所を使用する次の例では、ExtendedTest
の ApplicationContext
が base-config.xml
および extended-config.xml
からこの順序でロードされます。extended-config.xml
で定義された Bean は、base-config.xml
で定義された Bean をオーバーライド(つまり、置換)できます。次の例は、あるクラスが別のクラスを継承し、独自の構成ファイルとスーパークラスの構成ファイルの両方を使用する方法を示しています。
Java
Kotlin
@ExtendWith(SpringExtension.class)
// ApplicationContext will be loaded from "/base-config.xml"
// in the root of the classpath
@ContextConfiguration("/base-config.xml") (1)
class BaseTest {
// class body...
}
// ApplicationContext will be loaded from "/base-config.xml" and
// "/extended-config.xml" in the root of the classpath
@ContextConfiguration("/extended-config.xml") (2)
class ExtendedTest extends BaseTest {
// class body...
}
1 | スーパークラスで定義された構成ファイル。 |
2 | サブクラスで定義された構成ファイル。 |
@ExtendWith(SpringExtension::class)
// ApplicationContext will be loaded from "/base-config.xml"
// in the root of the classpath
@ContextConfiguration("/base-config.xml") (1)
open class BaseTest {
// class body...
}
// ApplicationContext will be loaded from "/base-config.xml" and
// "/extended-config.xml" in the root of the classpath
@ContextConfiguration("/extended-config.xml") (2)
class ExtendedTest : BaseTest() {
// class body...
}
1 | スーパークラスで定義された構成ファイル。 |
2 | サブクラスで定義された構成ファイル。 |
同様に、コンポーネントクラスを使用する次の例では、ExtendedTest
の ApplicationContext
が BaseConfig
クラスと ExtendedConfig
クラスからこの順序でロードされます。ExtendedConfig
で定義された Bean は、BaseConfig
で定義された Bean をオーバーライド(つまり、置換)できます。次の例は、あるクラスが別のクラスを継承し、独自の構成クラスとスーパークラスの構成クラスの両方を使用する方法を示しています。
Java
Kotlin
// ApplicationContext will be loaded from BaseConfig
@SpringJUnitConfig(BaseConfig.class) (1)
class BaseTest {
// class body...
}
// ApplicationContext will be loaded from BaseConfig and ExtendedConfig
@SpringJUnitConfig(ExtendedConfig.class) (2)
class ExtendedTest extends BaseTest {
// class body...
}
1 | スーパークラスで定義された構成クラス。 |
2 | サブクラスで定義された構成クラス。 |
// ApplicationContext will be loaded from BaseConfig
@SpringJUnitConfig(BaseConfig::class) (1)
open class BaseTest {
// class body...
}
// ApplicationContext will be loaded from BaseConfig and ExtendedConfig
@SpringJUnitConfig(ExtendedConfig::class) (2)
class ExtendedTest : BaseTest() {
// class body...
}
1 | スーパークラスで定義された構成クラス。 |
2 | サブクラスで定義された構成クラス。 |
コンテキスト初期化子を使用する次の例では、ExtendedTest
の ApplicationContext
は BaseInitializer
および ExtendedInitializer
を使用して初期化されます。ただし、イニシャライザーが呼び出される順序は、Spring の Ordered
インターフェースを実装するか、Spring の @Order
アノテーションまたは標準 @Priority
アノテーションが付けられているかによって異なります。次の例は、あるクラスが別のクラスを継承し、独自の初期化子とスーパークラスの初期化子の両方を使用する方法を示しています。
Java
Kotlin
// ApplicationContext will be initialized by BaseInitializer
@SpringJUnitConfig(initializers = BaseInitializer.class) (1)
class BaseTest {
// class body...
}
// ApplicationContext will be initialized by BaseInitializer
// and ExtendedInitializer
@SpringJUnitConfig(initializers = ExtendedInitializer.class) (2)
class ExtendedTest extends BaseTest {
// class body...
}
1 | スーパークラスで定義された初期化子。 |
2 | サブクラスで定義された初期化子。 |
// ApplicationContext will be initialized by BaseInitializer
@SpringJUnitConfig(initializers = [BaseInitializer::class]) (1)
open class BaseTest {
// class body...
}
// ApplicationContext will be initialized by BaseInitializer
// and ExtendedInitializer
@SpringJUnitConfig(initializers = [ExtendedInitializer::class]) (2)
class ExtendedTest : BaseTest() {
// class body...
}
1 | スーパークラスで定義された初期化子。 |
2 | サブクラスで定義された初期化子。 |