关于JUnit5 你必须知道的(一) JUnit5架构和环境搭建
由于工作中都是使用maven來構建項目,所以下面有關環境搭建都是使用的maven(IDE使用的idea)
凡是開發對于JUnit這個框架一定都不陌生,JUnit 作為一個單元測試框架已經誕生了數十年。而JUnit 5在JUnit 4發布多年后的2017年也終于發布了。
JUnit 5架構體系
作為最新版本的JUnit框架,JUnit 5相比之前版本的JUnit框架有了較大的突破,添加了許多新特性。
之前的JUnit 框架所有的功能都被打包在一個構件(artifact)中。它被提供給開發者、IDE、構建工具、其他測試框架、其他擴展等使用,不同的使用者,依賴的都是一個同樣的jar包。
而JUnit 5 最重要的一大優化就是其架構體系,它由三個不同子項目的幾個不同模塊組成。
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit Platform 其主要作用是在 JVM 上啟動測試框架。它定義了一個抽象的 TestEngine API 來定義運行在平臺上的測試框架,同時還支持通過命令行、Gradle 和 Maven 來運行平臺。通過 JUnit Platform,其他的自動化測試引擎或開發人員自己定制的引擎都可以接入 Junit 實現對接和執行
JUnit Jupiter 包含了 JUnit 5 最新的編程模型和擴展機制; Jupiter 本身也是一個基于 Junit Platform 的引擎實現。
JUnit Vintage 兼容JUnit3,JUnit4 版本的測試引擎
再來看下JUnit 5的架構圖
我們來進一步看看各個子項目的作用。
第一層 : 開發人員(這里只進行業務開發撰寫單元測試) 使用junit-jupiter-api等測試框架api編寫單元測試
第二層 : 測試引擎,JUnit 或其他測試框架實現引擎API的框架,jupiter-engine和 vintage-engine分別是junit 4和junit 5 對測試引擎API的實現,其他的測試框架也可以通過實現引擎API從而接入JUnit 平臺
第三層: 平臺引擎 junit-platform-engine 是上一層各種引擎實現的抽象,即引擎的接口標準。
第四層: 啟動器 通過ServiceLoader發現測試引擎的實現并安排其執行。 它為IDE和構建工具提供了API,因此IDE可以與測試執行交互,例如,通過啟動單個測試并顯示其結果。
JUnit 5的環境搭建
再來說下使用中最需要注意的環境搭建吧
Intellij IDEA 從 2016.2 開始就對 JUnit 5提供了基本的支持。如果你使用的是IDEA 2019及以上的版本,那么就放心使用吧。我使用的就是2019.2.3 完全OK !
前面說過JUnit還支持通過使用命令行、Gradle 和 Maven 來運行平臺。如果你的項目是使用maven構建的,那么你就需要使用 Maven Surefire 插件來運行你的JUnit 測試平臺。
如果你只是需要在IDE運行你的測試用例,那么你只要使用junit-jupiter對應的pom即可,不需要引入junit-platform等測試引擎相關的依賴。
如果想在maven下運行Junit5的測試用例,那么你就需要junit-jupiter-api,junit-jupiter-engine以及junit-platform-launcher,以及maven surefire插件,如下所示:
<build><plugins><plugin><!--注意如果使用的surefire plugin是2.22.2以下的版本,那么請也引入junit-platform-surefire-provider--><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version><!-- <dependencies><dependency><groupId>org.junit</groupId><artifactId>junit-platform-surefire-provider</artifactId><version>1.1.0</version></dependency></dependencies>--></plugin></plugins></build><dependencyManagement><dependencies><dependency><groupId>org.junit</groupId><artifactId>junit-bom</artifactId><version>5.6.1</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement><dependencies><!--因為使用了參數化測試,所以我引入了params--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><scope>test</scope></dependency><!-- 不需要單獨引入junit-platform-engine,junit-jupiter-engine已經幫我們引入了--><dependency><groupId> org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><scope>test</scope></dependency><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-launcher</artifactId><scope>test</scope></dependency></dependencies>需要注意的有兩點:
1.maven surefire插件的版本
2.使用junit-bom來統一管理Junit5各子項目的版本,其好處就不用我多說了。
如果你想要同時在JUnit 5的平臺上使用Junit 4和Junit 3的單元測試,就可以移除junit 低版本的依賴,改為如下pom
<dependency><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId><scope>test</scope></dependency>JUnit 5 API 生命周期
JUnit 5提供了很多新特性,相對的也會有大量新的API。在開發過程中大家是不是都遇到過升級完版本之后,發現以前使用的API突然就不支持了。JUnit 5 團隊為了解決這個問題,明確各個API的使用范圍,對所有的API 設立了生命周期。主要分為以下五種狀態
內部 API(internal)
不允許被 JUnit 開發者之外的任何人使用。這部分 API 可能被移除,并且不會事先通知。
已過時(Deprecated)
不應該再被使用的 API,它們可能在下次小版本發布時被移除。
實驗階段(Experimental)
為一些新的、實驗階段的特性所使用的 API,這些新特性可能會或已經被公開使用并接受反饋中。
可以使用,但要謹慎。這些 API 未來可能被提升至 維護中 或 穩定 級別,但也可能不帶提前通知就被移除。
維護中(Maintained)
使用該 API 的特性,至少在該大版本的下一個小版本發布時不會發生向后不兼容的改變。如果未來有移除維護中 API 的計劃,它會先被打回到 已過時 階段。
穩定(Stable)
使用該 API 的特性,至少在下個大版本發布之前不會發生向后不兼容的改變。
所有JUnit 對外公開的類都帶有一個 @API(status) 注解,其中 status就是上面枚舉值中的一個。
參考資料:
「譯」JUnit 5 系列:基礎入門
Junit5 用戶指南
總結
以上是生活随笔為你收集整理的关于JUnit5 你必须知道的(一) JUnit5架构和环境搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IP地址分类及CIDR划分方法
- 下一篇: 关于JUnit5 你必须知道的(二)JU