Junit5 架構、新特性及基本使用(常用註解與套件執行)
本文為霍格沃茲測試學院優秀學員 Junit 學習筆記。測試開發技能進階,文末加群。
一、Junit 簡介與架構
什麼是 Junit5,在 Junit5 的官方介紹文件中這寫到:
Junit5 由JUnit Platform
+ JUnit Jupiter
+ JUnit Vintage3
部分構成,借用 IBM
Developer 的一張圖來說明 JUnit 5 的架構 :
JUnit Platform :
其主要作用是在 JVM 上啟動測試框架。它定義了一個抽象的 TestEngine API
來定義執行在平臺上的測試框架;也就是說其他的自動化測試引擎或開發人員⾃⼰定製的引擎都可以接入 Junit
實現對接和執行。同時還支援通過命令列、Gradle 和 Maven 來執行平臺(這對於我們做自動化測試至關重要)。
JUnit Jupiter :
這是 Junit5 的核心,可以看作是承載 Junit4 原有功能的演進,包含了 JUnit 5 最新的程式設計模型和擴充套件機制;很多豐富的新特性使
JUnit ⾃動化測試更加方便、功能更加豐富和強大。也是測試需要重點學習的地方;Jupiter 本身也是⼀一個基於 Junit Platform
的引擎實現,對 JUnit 5 而言,JUnit Jupiter API 只是另一個 API!。
JUnit Vintage :
Junit 發展了10數年,Junit 3 和 Junit 4 都積累了大量的⽤使用者,作為新一代框 架,這個模組是對 JUnit3,JUnit4
版本相容的測試引擎,使舊版本 junit 的⾃動化測試指令碼也可以順暢運行在 Junit5 下,它也可以看作是基於 Junit Platform
實現的引擎範例。JUnit 5 對 Java 執行環境的最低要求是 Java 8。
二、Junit5 的新特性
-
巢狀單元測試
-
Lambda支援
-
引數化測試
-
重複測試
-
動態測試
JUnit 4 與 JUnit 5 中的註解比較
三、JUnit 5 常用註解
3.1 Junit5 常用註解
3.2 實操演示
-
1)建立 maven 工程 XUnit,
pom.xml
中新增Junit5
的依賴。<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.5.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.5.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>5.5.2</version> <scope>test</scope> </dependency>
-
2)其餘的 XUnit 框架通用的設計執行規則可參考:《 如何利用 xUnit 框架對測試用例進行維護》。
-
3)新增用例
@Test
,再在用例執行前後新增@BeforeEach
、@AfterEach
: -
執行結果:
-
4)在測試類執行前後新增
@BeforeAll
和@AfterAll
: -
測試結果:
-
5)在測試用例
test1
上加入註解@Disabled
,使test1
失效。 -
測試結果:
-
從測試結果中我們可以看到 test1 用例被 ignore,沒有被執行。
-
6)分別將test1和test2用
@DisplayName
加上用例展示名稱。 -
測試結果:
-
7)對測試用例2加上註解
@RepeatedTest
,使其 額外 重複執行3次: -
測試結果:
-
從測試結果中我們可以看到測試用例2被額外重複執行了3次
-
8)對於
@Nested
巢狀執行舉例如下: -
測試結果:
-
由測試結果可以看出,
@Nested
的執行順序為先執行@Nested
巢狀外層的用例,再以倒敘形式執行@Nested
用例,然後再執行第二層巢狀的用例:外層->倒敘巢狀->第二層巢狀
。
四、Junit5 套件執行
@RunWith 是從Junit4遷移過來的,@RunWith 連同它的引數 JUnitPlatform.class(一個基於 JUnit 4 且理解
JUnit Platform 的 Runner)讓您可以在 Eclipse 內執行 JUnit Jupiter 單元測試。Eclipse 尚未原生支援
JUnit 5。未來,Eclipse 將提供原生的 JUnit 5 支援,那時我們不再需要此註解;Junit5官方給出了替代它的註解:
4.1 @RunWith+@SelectPackages
- 有兩個包testcasedemo, junit5demo,利用 @RunWith+@SelectPackages 將包中測試類依次執行。
套件類:
測試結果:
4.2 @RunWith+@SelectPackages+@IncludePackages
@RunWith
+@SelectPackages
+@IncludePackages
配合使用過濾出需要執行的測試包testcasedemo.demo2
。
套件類:
測試結果:
4.3 @RunWith+@SelectPackages+@ExcludePackages
@RunWith
+@SelectPackages
+@ExcludePackages
配合使用過濾出不需要執行的測試包testcasedemo.demo2
。
套件類:
測試結果:
4.4 @RunWith+@SelectPackages+@IncludeClassNamePatterns
- 將 junit5demo 包下的 TestJunit5demo 和 testcasedemo.demo2 所有測試類過濾出來並執行。
套件類:
測試結果:
4.5 @RunWith+@SelectPackages+@IncludeTags
在testcasedemo.demo2.TestDemo2
的方法testDemo2
上加上註解@Tag
:
過濾並執行方法testDemo2:
套件類:
測試結果:
5、參考文件:
Junit5官網:
IBM Developer:
-
https://www.ibm.com/developerworks/cn/java/j-introducing-junit5-part1-jupiter-api/index.html
-
https://www.ibm.com/developerworks/cn/java/j-junit5/index.html
** _
來霍格沃茲測試開發學社,學習更多軟體測試與測試開發的進階技術,知識點涵蓋web自動化測試 app自動化測試、介面自動化測試、測試框架、效能測試、安全測試、持續整合/持續交付/DevOps,測試左移、測試右移、精準測試、測試平臺開發、測試管理等內容,課程技術涵蓋bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相關技術,全面提升測試開發工程師的技術實力
QQ交流群:484590337
公眾號 TestingStudio
點選獲取更多資訊