知識庫 / Spring RSS 訂閱

Spring 測試與 @EnabledIf 註解

Spring,Testing
HongKong
8
02:13 PM · Dec 06 ,2025

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

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.