Spring JUnit Jupiter 測試註解
當與 SpringExtension 和 JUnit Jupiter(即 JUnit 中的程式設計模型)結合使用時,支援以下註解。
@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 和 @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、@ContextConfiguration 和 @WebAppConfiguration 的 javadoc。
@TestConstructor
@TestConstructor 是一個可以應用於測試類的註解,用於配置測試類建構函式的引數如何從測試的 ApplicationContext 中的元件自動裝配。
如果測試類上不存在或元存在 @TestConstructor,將使用預設的 *測試建構函式自動裝配模式*。有關如何更改預設模式的詳細資訊,請參閱下面的提示。但請注意,建構函式上本地宣告的 @Autowired 或 @jakarta.inject.Inject 優先於 @TestConstructor 和預設模式。
|
更改預設測試建構函式自動裝配模式
可以透過將 預設模式也可以配置為 JUnit 平臺配置引數。 如果未設定 |
@TestConstructor 僅支援與 SpringExtension 結合使用,用於 JUnit Jupiter。請注意,SpringExtension 通常會自動為您註冊——例如,當使用 @SpringJUnitConfig 和 @SpringJUnitWebConfig 等註解或 Spring Boot Test 中的各種與測試相關的註解時。 |
@NestedTestConfiguration
@NestedTestConfiguration 是一個可以應用於測試類的註解,用於配置 Spring 測試配置註解如何在內部測試類的封閉類層次結構中進行處理。
如果測試類、其超型別層次結構或其封閉類層次結構中不存在或元存在 @NestedTestConfiguration,將使用預設的 *封閉配置繼承模式*。有關如何更改預設模式的詳細資訊,請參閱下面的提示。
|
更改預設封閉配置繼承模式
預設的 *封閉配置繼承模式* 是 |
Spring TestContext 框架 尊重以下註解的 @NestedTestConfiguration 語義。
@NestedTestConfiguration 的使用通常只在與 JUnit Jupiter 中的 @Nested 測試類結合時才有意義;但是,可能還有其他支援 Spring 和巢狀測試類的測試框架使用此註解。 |
有關示例和更多詳細資訊,請參閱 @Nested 測試類配置。
@EnabledIf
@EnabledIf 用於表示如果提供的 expression 計算結果為 true,則應執行帶註解的 JUnit Jupiter 測試類或測試方法。具體來說,如果表示式計算結果為 Boolean.TRUE 或等於 true 的 String(忽略大小寫),則啟用測試。當應用於類級別時,該類中的所有測試方法預設也會自動啟用。
表示式可以是以下任何一種
-
Spring Expression Language (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 用於表示如果提供的 expression 計算結果為 true,則應停用帶註解的 JUnit Jupiter 測試類或測試方法,並且不應執行。具體來說,如果表示式計算結果為 Boolean.TRUE 或等於 true 的 String(忽略大小寫),則停用測試。當應用於類級別時,該類中的所有測試方法也會自動停用。
表示式可以是以下任何一種
-
Spring Expression Language (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 也包含一個名為 |