1. 引言
在本文中,我們將使用 JUnit 5,探索 Spring 5 中的 @EnabledIf 和 @DisabledIf 註解。
簡單來説,這些註解使得在滿足特定條件時,可以啓用或禁用特定的測試。
我們將使用一個簡單的測試類來演示這些註解的工作原理:
@SpringJUnitConfig(Spring5EnabledAnnotationIntegrationTest.Config.class)
public class Spring5EnabledAnnotationIntegrationTest {
@Configuration
static class Config {}
}2. @EnabledIf
讓我們為我們的類添加這個簡單的測試,使用文本字面值 “true”:
@EnabledIf("true")
@Test
void givenEnabledIfLiteral_WhenTrue_ThenTestExecuted() {
assertTrue(true);
}如果運行此測試,它將正常執行。
但是,如果我們用提供的 String 替換為 “false”,則它將不會執行:
請注意,如果您想靜態禁用測試,則有專門的 @Disabled 註解用於此目的。
3. 使用屬性佔位符的 <em @EnabledIf>
使用 <em @EnabledIf> 的一種更實用的方法是使用屬性佔位符:
@Test
@EnabledIf(
expression = "${tests.enabled}",
loadContext = true)
void givenEnabledIfExpression_WhenTrue_ThenTestExecuted() {
// ...
}首先,我們需要確保 loadContext 參數設置為 true,以便加載 Spring 上下文。
默認情況下,此參數設置為 false 以避免不必要的上下文加載。
4. 使用 SpEL 表達式的 @EnabledIf 註解
最後,我們可以使用帶有 Spring 表達式語言 (SpEL) 表達式的註解。
例如,我們可以在 JDK 1.8 運行時僅啓用測試。
@Test
@EnabledIf("#{systemProperties['java.version'].startsWith('1.8')}")
void givenEnabledIfSpel_WhenTrue_ThenTestExecuted() {
assertTrue(true);
}5. <em @DisabledIf>
此註解是 > 的反面。
例如,我們可以禁用在 Java 1.7 上運行的測試。
@Test
@DisabledIf("#{systemProperties['java.version'].startsWith('1.7')}")
void givenDisabledIf_WhenTrue_ThenTestNotExecuted() {
assertTrue(true);
}6. 結論
在本文中,我們通過了幾個使用 @EnabledIf 和 @DisabledIf 註解在 JUnit 5 測試中的示例,這些測試使用了 SpringExtension。