Spring JUnit Jupiter テストアノテーション
以下のアノテーションは、SpringExtension
および JUnit Jupiter(つまり、JUnit 5 のプログラミングモデル)と組み合わせて使用するとサポートされます。
@SpringJUnitConfig
@SpringJUnitConfig
は、JUnit Jupiter の @ExtendWith(SpringExtension.class)
と Spring TestContext フレームワークの @ContextConfiguration
を組み合わせた合成アノテーションです。クラスレベルで @ContextConfiguration
のドロップイン置換として使用できます。構成オプションに関して、@ContextConfiguration
と @SpringJUnitConfig
の唯一の違いは、@SpringJUnitConfig
の value
属性でコンポーネントクラスを宣言できることです。
次の例は、@SpringJUnitConfig
アノテーションを使用して構成クラスを指定する方法を示しています。
Java
Kotlin
@SpringJUnitConfig(TestConfig.class) (1)
class ConfigurationClassJUnitJupiterSpringTests {
// class body...
}
1 | 構成クラスを指定します。 |
@SpringJUnitConfig(TestConfig::class) (1)
class ConfigurationClassJUnitJupiterSpringTests {
// class body...
}
1 | 構成クラスを指定します。 |
次の例は、@SpringJUnitConfig
アノテーションを使用して構成ファイルの場所を指定する方法を示しています。
Java
Kotlin
@SpringJUnitConfig(locations = "/test-config.xml") (1)
class XmlJUnitJupiterSpringTests {
// class body...
}
1 | 構成ファイルの場所を指定します。 |
@SpringJUnitConfig(locations = ["/test-config.xml"]) (1)
class XmlJUnitJupiterSpringTests {
// class body...
}
1 | 構成ファイルの場所を指定します。 |
詳細については、コンテキスト管理および @SpringJUnitConfig
(Javadoc) および @ContextConfiguration
の javadoc を参照してください。
@SpringJUnitWebConfig
@SpringJUnitWebConfig
は、JUnit Jupiter の @ExtendWith(SpringExtension.class)
と Spring TestContext フレームワークの @ContextConfiguration
および @WebAppConfiguration
を組み合わせた合成アノテーションです。クラスレベルで、@ContextConfiguration
および @WebAppConfiguration
のドロップイン置換として使用できます。構成オプションに関して、@ContextConfiguration
と @SpringJUnitWebConfig
の唯一の違いは、@SpringJUnitWebConfig
の value
属性を使用してコンポーネントクラスを宣言できることです。さらに、@SpringJUnitWebConfig
で resourcePath
属性を使用することによってのみ、@WebAppConfiguration
から value
属性をオーバーライドできます。
次の例は、@SpringJUnitWebConfig
アノテーションを使用して構成クラスを指定する方法を示しています。
Java
Kotlin
@SpringJUnitWebConfig(TestConfig.class) (1)
class ConfigurationClassJUnitJupiterSpringWebTests {
// class body...
}
1 | 構成クラスを指定します。 |
@SpringJUnitWebConfig(TestConfig::class) (1)
class ConfigurationClassJUnitJupiterSpringWebTests {
// class body...
}
1 | 構成クラスを指定します。 |
次の例は、@SpringJUnitWebConfig
アノテーションを使用して構成ファイルの場所を指定する方法を示しています。
Java
Kotlin
@SpringJUnitWebConfig(locations = "/test-config.xml") (1)
class XmlJUnitJupiterSpringWebTests {
// class body...
}
1 | 構成ファイルの場所を指定します。 |
@SpringJUnitWebConfig(locations = ["/test-config.xml"]) (1)
class XmlJUnitJupiterSpringWebTests {
// class body...
}
1 | 構成ファイルの場所を指定します。 |
詳細については、コンテキスト管理、および @SpringJUnitWebConfig
(Javadoc) 、@ContextConfiguration
(Javadoc) 、@WebAppConfiguration
(Javadoc) の javadoc を参照してください。
@TestConstructor
@TestConstructor
は、テストのクラスコンストラクターのパラメーターをテストの ApplicationContext
のコンポーネントからオートワイヤーする方法を構成するために使用される型レベルのアノテーションです。
@TestConstructor
が存在しないか、テストクラスにメタに存在する場合は、デフォルトのテストコンストラクターのオートワイヤモードが使用されます。デフォルトモードを変更する方法の詳細については、以下のヒントを参照してください。ただし、コンストラクターでの @Autowired
、@jakarta.inject.Inject
、または @javax.inject.Inject
のローカル宣言は、@TestConstructor
およびデフォルトモードの両方より優先されることに注意してください。
デフォルトのテストコンストラクターオートワイヤーモードの変更 デフォルトのテストコンストラクターのオートワイヤーモードは、 Spring Framework 5.3 以降、デフォルトモードは JUnit プラットフォーム構成パラメーター (英語) として設定することもできます。
|
Spring Framework 5.2 以降、@TestConstructor は、JUnit Jupiter で使用する SpringExtension との組み合わせでのみサポートされます。多くの場合、SpringExtension は自動的に登録されます。たとえば、@SpringJUnitConfig や @SpringJUnitWebConfig などのアノテーション、Spring Boot テストのさまざまなテスト関連のアノテーションを使用する場合などです。 |
@NestedTestConfiguration
@NestedTestConfiguration
は、内部テストクラスの囲んでいるクラス階層内で Spring Test 構成アノテーションがどのように処理されるかを構成するために使用される型レベルのアノテーションです。
@NestedTestConfiguration
がテストクラス、そのスーパー型階層、それを囲むクラス階層に存在またはメタ存在しない場合、デフォルトの外側の構成継承モードが使用されます。デフォルトモードを変更する方法の詳細については、以下のヒントを参照してください。
デフォルトの包含構成継承モードの変更 デフォルトの同封構成継承モードは |
Spring TestContext フレームワークは、次のアノテーションの @NestedTestConfiguration
セマンティクスを尊重します。
@NestedTestConfiguration の使用は、通常、JUnit Jupiter の @Nested テストクラスと組み合わせた場合にのみ意味があります。ただし、Spring をサポートする他のテストフレームワークと、このアノテーションを利用するネストされたテストクラスが存在する場合があります。 |
例と詳細については、@Nested
テストクラスの構成を参照してください。
@EnabledIf
@EnabledIf
は、アノテーション付きの JUnit Jupiter テストクラスまたはテストメソッドが有効であり、提供された expression
が true
に評価される場合に実行する必要があることを通知するために使用されます。具体的には、式が Boolean.TRUE
または true
に等しい String
(大文字小文字を無視)に評価される場合、テストは有効になります。クラスレベルで適用すると、そのクラス内のすべてのテストメソッドもデフォルトで自動的に有効になります。
式は次のいずれかです。
Spring 式言語(SpEL)式。例:
@EnabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")
Spring
Environment
で使用可能なプロパティのプレースホルダー。例:@EnabledIf("${smoke.tests.enabled}")
テキストリテラル。例:
@EnabledIf("true")
ただし、@EnabledIf("false")
は @Disabled
と同等であり、@EnabledIf("true")
は論理的に無意味であるため、プロパティプレースホルダーの動的解決の結果ではないテキストリテラルはゼロの実用的な値であることに注意してください。
@EnabledIf
をメタアノテーションとして使用して、カスタム合成アノテーションを作成できます。例: 次のように、カスタム @EnabledOnMac
アノテーションを作成できます。
Java
Kotlin
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@EnabledIf(
expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
reason = "Enabled on Mac OS"
)
public @interface EnabledOnMac {}
@Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
@EnabledIf(
expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
reason = "Enabled on Mac OS"
)
annotation class EnabledOnMac {}
|
JUnit 5.7 以降、JUnit Jupiter には |
@DisabledIf
@DisabledIf
は、アノテーション付きの JUnit Jupiter テストクラスまたはテストメソッドが無効になっていることを通知するために使用され、提供された expression
が true
と評価される場合は実行されません。具体的には、式が Boolean.TRUE
または true
に等しい String
(大文字と小文字を区別しない)と評価される場合、テストは無効になります。クラスレベルで適用すると、そのクラス内のすべてのテストメソッドも自動的に無効になります。
式は次のいずれかです。
Spring 式言語(SpEL)式。例:
@DisabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")
Spring
Environment
で使用可能なプロパティのプレースホルダー。例:@DisabledIf("${smoke.tests.disabled}")
テキストリテラル。例:
@DisabledIf("true")
ただし、@DisabledIf("true")
は @Disabled
と同等であり、@DisabledIf("false")
は論理的に無意味であるため、プロパティプレースホルダーの動的解決の結果ではないテキストリテラルはゼロの実用的な値であることに注意してください。
@DisabledIf
をメタアノテーションとして使用して、カスタム合成アノテーションを作成できます。例: 次のように、カスタム @DisabledOnMac
アノテーションを作成できます。
Java
Kotlin
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@DisabledIf(
expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
reason = "Disabled on Mac OS"
)
public @interface DisabledOnMac {}
@Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
@DisabledIf(
expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
reason = "Disabled on Mac OS"
)
annotation class DisabledOnMac {}
|
JUnit 5.7 以降、JUnit Jupiter には |