Junit5系列-Junit5中DisabledCondition條件測試執行

yoylee_web發表於2019-01-10

系列導航

點選跳轉到系列博文目錄導航

Junit5中提供了許多可以基於作業系統、系統變數、環境變數甚至可以基於指令碼去進行啟動或禁止測試方法的執行,但是不怎麼常用,就直接翻譯官網上的文章吧。

簡介

JUnit Jupiter中的ExecutionCondition擴充套件API允許開發人員以程式設計方式啟用或禁用容器或測試。 這種情況最簡單的例子是內建的DisabledCondition,它支援 @Disabled註釋,也就是@Disabled註解介紹博文
除了@Disabled之外,JUnit Jupiter還支援 org.junit.jupiter.api.condition類中的其他幾個註解去允許開發人員以註解宣告的方式啟用或禁用容器和測試的條件包。

下面介紹的所有註解也可以作為元註解使用,以便用來建立自定義註解。

例如,演示中的@TestOnMac註解就是將@Test和@EnabledOnOs結合在一個單獨的、可重用的註解中。

規定作業系統條件

可以通過@EnabledOnOs和@DisabledOnOs註解在特定作業系統上啟用或禁用容器或測試。

下面為demo,其中的每個斷言方法的作用,根據註解名幾乎就可以知道了:

@Test
@EnabledOnOs(MAC)
void onlyOnMacOs() {
    // ...
}

@TestOnMac
void testOnMac() {
    // ...
}

@Test
@EnabledOnOs({ LINUX, MAC })
void onLinuxOrMac() {
    // ...
}

@Test
@DisabledOnOs(WINDOWS)
void notOnWindows() {
    // ...
}

正如上述所說,其中@TestOnMac這個註解,就是根據已經有的註解作為元註解,組合而成的新註解,其原始碼為:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledOnOs;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import static org.junit.jupiter.api.condition.OS.MAC;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Test
@EnabledOnOs(MAC)
public @interface TestOnMac {
}

規定Java 執行環境條件

可以通過@EnabledOnJre和@DisabledOnJre註解在特定版本的Java執行時環境(JRE)上啟用或禁用容器或測試。

@Test
@EnabledOnJre(JAVA_8)
void onlyOnJava8() {
    // ...
}

@Test
@EnabledOnJre({ JAVA_9, JAVA_10 })
void onJava9Or10() {
    // ...
}

@Test
@DisabledOnJre(JAVA_9)
void notOnJava9() {
    // ...
}

規定系統屬性條件

通過 @EnabledIfSystemProperty 和 @DisabledIfSystemProperty 註解,
可以根據命名的JVM系統屬性的值啟用或禁用容器或測試。

其中通過matches屬性提供的值將被解釋為正規表示式。

@Test
@EnabledIfSystemProperty(named = "os.arch", matches = ".*64.*")
void onlyOn64BitArchitectures() {
    // ...
}

@Test
@DisabledIfSystemProperty(named = "ci-server", matches = "true")
void notOnCiServer() {
    // ...
}

規定環境變數條件

可以根據底層作業系統中命名的環境變數的值通過 @EnabledIfEnvironmentVariable和 @DisabledIfEnvironmentVariable 註解來啟用或禁用容器或測試。
其中通過matches屬性提供的值將被解釋為正規表示式。

@Test
@EnabledIfEnvironmentVariable(named = "ENV", matches = "staging-server")
void onlyOnStagingServer() {
    // ...
}

@Test
@DisabledIfEnvironmentVariable(named = "ENV", matches = ".*development.*")
void notOnDeveloperWorkstation() {
    // ...
}

規定指令碼依賴條件

JUnit Jupiter提供了根據對通過 @EnabledIf 或 @DisabledIf 註釋配置的指令碼的評估來啟用或禁用容器或測試的能力。指令碼可以用JavaScript、Groovy或任何其他指令碼語言編寫,這些指令碼語言都支援 JSR 223 定義的Java Scripting API。

注意:這兩個註解目前都屬於實驗性功能,請謹慎使用。

如果指令碼的邏輯僅依賴於當前的作業系統、當前的Java執行時環境版本、特定的JVM系統屬性或特定的環境變數,則應該考慮使用專門用於此目的的內建註釋之一。

@Test // Static JavaScript expression.
@EnabledIf("2 * 3 == 6")
void willBeExecuted() {
    // ...
}

@RepeatedTest(10) // Dynamic JavaScript expression.
@DisabledIf("Math.random() < 0.314159")
void mightNotBeExecuted() {
    // ...
}

@Test // Regular expression testing bound system property.
@DisabledIf("/32/.test(systemProperty.get('os.arch'))")
void disabledOn32BitArchitectures() {
    assertFalse(System.getProperty("os.arch").contains("32"));
}

@Test
@EnabledIf("'CI' == systemEnvironment.get('ENV')")
void onlyOnCiServer() {
    assertTrue("CI".equals(System.getenv("ENV")));
}

@Test // Multi-line script, custom engine name and custom reason.
@EnabledIf(value = {
                "load('nashorn:mozilla_compat.js')",
                "importPackage(java.time)",
                "",
                "var today = LocalDate.now()",
                "var tomorrow = today.plusDays(1)",
                "tomorrow.isAfter(today)"
            },
            engine = "nashorn",
            reason = "Self-fulfilling: {result}")
void theDayAfterTomorrow() {
    LocalDate today = LocalDate.now();
    LocalDate tomorrow = today.plusDays(1);
    assertTrue(tomorrow.isAfter(today));
}

指令碼繫結

下面的名稱繫結到每個指令碼上下文,因此可以在指令碼中使用。訪問器通過一個簡單的 String get(String name) 方法提供對類似地圖的結構的訪問。

序號 名稱 型別 描述
1 systemEnvironment accessor 作業系統環境變數訪問器
2 systemProperty accessor JVM系統屬性訪問器
3 junitConfigurationParameter accessor 配置引數取值
4 junitDisplayName String 測試或者容器的展示名稱
5 junitTags Set 測試或者容器的所有標籤資訊
6 junitUniqueId String 測試或者容器的唯一標識

如果轉載此博文,請附上本文連結,謝謝合作~ :https://blog.csdn.net/csdn___lyy

如果感覺這篇文章對您有所幫助,請點選一下“喜歡”或者“關注”博主,您的喜歡和關注將是我前進的最大動力!

refer: 官網

相關文章