Junit5系列-Junit5中DisabledCondition條件測試執行
系列導航
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: 官網
相關文章
- Junit5系列-Junit5中@Disabled禁止執行
- JUnit5學習之四:按條件執行
- JUnit5的條件測試、巢狀測試、重複測試巢狀
- Junit5系列-Junit5中Assumptions假設類
- Junit5系列-Junit5中Assertions斷言類
- Junit5系列-Junit5中@DisplayName自定義名稱
- Junit5系列-什麼是Junit5?
- Junit5系列-Junit5中assertThrows()與assertDoesNotThrow()方法詳解
- JUnit5編寫基本測試
- Springboot整合JUnit5優雅進行單元測試Spring Boot
- JUnit5依賴注入與測試介面依賴注入
- Java新一代單元測試框架JUnit5速覽Java框架
- JUnit5學習之六:引數化測試(Parameterized Tests)基礎Zed
- JUnit5學習之七:引數化測試(Parameterized Tests)進階Zed
- JUnit5的Tag、Filter、Order、LifecycleFilter
- JUnit5註解學習指引
- junit5 是不是全方面吊打 testng
- JUnit5學習之一:基本操作
- JUnit5學習之三:Assertions類
- JUnit5學習之二:Assumptions類
- 測試平臺系列(84) 支援複製其他前置條件
- 測試平臺系列(83) 前置條件支援Redis語句Redis
- ARM技術 —— 條件執行
- 04 Windows批處理中的條件執行Windows
- 測試平臺系列(94) 前置條件該怎麼支援Python呢Python
- 基於 junit5 實現 junitperf 原始碼分析原始碼
- postman的批次執行:用於多條介面測試用例批次執行,輸出介面測試測試結果Postman
- 多執行緒(2)-執行緒同步條件變數執行緒變數
- 多執行緒06:條件變數執行緒變數
- 測試平臺系列(95) 前置條件支援簡單的python指令碼Python指令碼
- Cypress系列(65)- 測試執行失敗自動重試
- 測試平臺系列(97) 完善執行case部分
- Python執行緒條件變數Condition解析Python執行緒變數
- JUnit5學習之八:綜合進階(終篇)
- [20190502]查詢條件不等於測試.txt
- 測試平臺系列(74) 測試計劃定時執行初體驗
- Python執行緒專題7:條件變數Python執行緒變數
- Spring 對 Junit4,Junit5 的支援上的運用Spring