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 | 指定組態檔案的位置。 |
請參閱 Context 管理 以及 @SpringJUnitConfig
和 @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 | 指定組態檔案的位置。 |
請參閱 Context 管理 以及 @SpringJUnitWebConfig
、@ContextConfiguration
和 @WebAppConfiguration
的 javadoc 以取得更多詳細資訊。
@TestConstructor
@TestConstructor
是一個可以套用至測試類別的註解,用於組態如何從測試 ApplicationContext
中的組件自動裝配測試類別建構子的參數。
如果測試類別上不存在或 Meta-present @TestConstructor
,將使用預設的測試建構子自動裝配模式。請參閱下方提示,以了解如何變更預設模式的詳細資訊。但是請注意,建構子上 @Autowired
、@jakarta.inject.Inject
或 @javax.inject.Inject
的本機宣告優先於 @TestConstructor
和預設模式。
變更預設測試建構子自動裝配模式
預設的測試建構子自動裝配模式可以透過將 預設模式也可以組態為 JUnit Platform 組態參數。 如果未設定 |
@TestConstructor 僅在與 SpringExtension 結合使用於 JUnit Jupiter 時才受支援。請注意,SpringExtension 通常會自動為您註冊 – 例如,當使用 @SpringJUnitConfig 和 @SpringJUnitWebConfig 等註解或 Spring Boot Test 中的各種測試相關註解時。 |
@NestedTestConfiguration
@NestedTestConfiguration
是一個可以套用至測試類別的註解,用於組態如何在內部測試類別的封閉類別階層中處理 Spring 測試組態註解。
如果測試類別、其超類型階層或其封閉類別階層中不存在或 Meta-present @NestedTestConfiguration
,則將使用預設的封閉組態繼承模式。請參閱下方提示,以了解如何變更預設模式的詳細資訊。
變更預設封閉組態繼承模式
預設的封閉組態繼承模式為 |
Spring TestContext 框架 針對下列註解,遵循 @NestedTestConfiguration
語意。
@NestedTestConfiguration 的使用通常僅在與 JUnit Jupiter 中的 @Nested 測試類別結合使用時才有意義;但是,可能有其他測試框架支援 Spring 和巢狀測試類別,這些框架會使用此註解。 |
請參閱 @Nested
測試類別組態 以取得範例和更多詳細資訊。
@EnabledIf
@EnabledIf
用於表示如果提供的 expression
評估為 true
,則啟用註解的 JUnit Jupiter 測試類別或測試方法,並應執行。具體而言,如果運算式評估為 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
用作 Meta-Annotation 來建立自訂組合註解。例如,您可以建立自訂 @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
用於表示如果提供的 expression
評估為 true
,則停用註解的 JUnit Jupiter 測試類別或測試方法,且不應執行。具體而言,如果運算式評估為 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
用作 Meta-Annotation 來建立自訂組合註解。例如,您可以建立自訂 @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 也具有名為 |