Spring JUnit Jupiter 測試註解
當與 JUnit Jupiter (即 JUnit 5 中的程式設計模型) 的 SpringExtension
結合使用時,支援以下註解
@SpringJUnitConfig
@SpringJUnitConfig
是一個組合註解,它將 JUnit Jupiter 的 @ExtendWith(SpringExtension.class)
與 Spring TestContext Framework 的 @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 Framework 的 @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
或 @javax.inject.Inject
優先於 @TestConstructor
和預設模式。
更改預設測試建構函式自動裝配模式
可以透過將 預設模式也可以配置為 JUnit Platform 配置引數。 如果未設定 |
@TestConstructor 僅支援與 JUnit Jupiter 一起使用的 SpringExtension 。請注意,SpringExtension 通常會自動為你註冊——例如,當使用 @SpringJUnitConfig 和 @SpringJUnitWebConfig 等註解或 Spring Boot Test 中的各種測試相關注解時。 |
@NestedTestConfiguration
@NestedTestConfiguration
是一個註解,可以應用於測試類,以配置如何在內部測試類的封閉類層次結構中處理 Spring 測試配置註解。
如果在測試類本身、其超類層次結構或其封閉類層次結構中不存在或未元存在 @NestedTestConfiguration
,則將使用預設的 封閉配置繼承模式。有關如何更改預設模式的詳細資訊,請參閱下面的提示。
更改預設封閉配置繼承模式
預設的 封閉配置繼承模式 是 |
Spring TestContext Framework 遵循以下註解的 @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 也具有名為 |