「譯」JUnit 5 系列:環境搭建


原文地址:http://blog.codefx.org/libraries/junit-5-setup/
原文日期:15, Feb, 2016
譯文首發: Linesh 的博客:環境搭建
我的 Github:http://github.com/linesh-simplicity

2015年11月,Junit Lambda 團隊發布了該項目的 第一版原型 。此后,該項目把名稱改成了 JUnit 5 並獨立了出來,隨后在2016年2月份的時候發布了一個 alpha 版本。本篇打算以一系列文章,簡短地探索一下以下幾個方面:

(如果不喜歡看文章,你可以戳這里看我的演講,或者看一下最近的 vJUG 講座,或者我在 DevoxxPL 上的 PPT

本篇將介紹 JUnit 5 的環境搭建,看完之后你應該能夠使用新的 API 來撰寫測試,並且使用你喜歡的 IDE 或構建工具來跑這些測試了。

概述

本系列文章都基於 Junit 5發布的先行版 Milestone 2。它可能會有變化。如果有新的里程碑(milestone)版本發布,或者試用版正式發行時,我會再來更新這篇文章。

這里要介紹的多數知識你都可以在 JUnit 5 用戶指南 中找到(這個鏈接指向的是先行版 Milestone 2,想看的最新版本文檔的話請戳這里),並且指南還有更多的內容等待你發掘。下面的所有代碼都可以在 我的 Github 上找到。

目錄

  • 第一個測試
  • 運行測試
    • 使用 JUnit 4 runner
    • IDE 的支持
    • 構建工具的支持
    • 命令行支持也不賴
  • 向下兼容性
  • 回顧
  • 分享&關注

第一個測試

支持測試撰寫的 API 包含在 junit-jupiter-api 包中。在構建工具中引入這個包,就行了。這就是全部,你就可以開始寫測試了。

  • Group ID: org.junit.jupiter
  • Artifact ID: junit-jupiter-api
  • Version: 5.0.0-M2

我們來寫第一個測試吧,此處簡單最好:

package org.codefx.demo.junit5;
 
import org.junit.jupiter.api.Test;
 
class HelloWorldTest {
 
	@Test
	void helloJUnit5() {
		System.out.println("Hello, JUnit 5.");
	}
 
}

看起來怎樣?沒 public ,感覺帥氣不?這里我不會太深入細節講解,不過下一篇我會深入討論下這個(以及其他的一些基礎)。請別急,接着往下看。

運行測試

JUnit 5 是一代全新的測試框架,不過工具內置的支持則還未完全跟上。好在目前已有簡易的方法來運行 JUnit 5 及其測試。

使用 JUnit 4 runner

JUnit 團隊提供了一個 JunitPlatform runner,可以使用它在 Junit 4 上運行 JUnit 5 的測試。這個 runner 在另一個包下,因此你也必須將它加入到你的項目中:

  • Group ID: org.junit.platform
  • Artifact ID: junit-platform-runner
  • Version: 1.0.0-M2

這個 runner 最終會調用 Junit 引擎,后者才是真正運行 Junit 5 測試的部分。引擎也是在不同的包下,你也必須將它加入到項目中:

  • Group ID: org.junit.jupiter
  • Artifact ID: junit-jupiter-engine
  • Version: 5.0.0-M2

要運行項目中所有的測試,為它們創建一個測試套件是最簡單的做法:


package org.codefx.demo.junit5;
 
import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.runner.SelectPackages;
import org.junit.runner.RunWith;
 
@RunWith(JUnitPlatform.class)
@SelectPackages({ "org.codefx.demo.junit5" })
public class TestWithJUnit5 { }

不過請注意,這個類必須是一個 JUnit 4 的測試類,也即是說它必須遵循 一般的命名規范,並且必須是 public 的。@SelectPackages 注解會把包當做一個有層級的結構,因此它會負責跑 org.codefx.demo.junit5 開頭的包下的所有測試。

至此所有工作都完成了!你的 IDE 和構建工具應該都能運行這個 @RunWith(JUnitPlatform.class) 注解的測試類了,它會負責跑所有的 JUnit 5 的新測試。

不過在 JUnit 5 被完全支持之前,一些特性可能還不能工作,比如 IDE 無法運行單獨的測試等。不過目前為止,這是我發現的最簡單並且在多平台下均工作良好的方案了。

IDE 的支持

Intellij IDEA 2016.2 開始 對 JUnit 5 有了基本的支持。盡管支持還不是很完美,並且還需時刻關注 JUnit 5 的發展,不過畢竟最基本的支持有了,現在使用 JUnit 5 已經簡單得多了。

Eclipse 方面團隊 仍在着手於內置支持的開發

構建工具的支持

JUnit 團隊在為構建工具提供 JUnit 5 支持的基礎上已經做了大量的工作,比如提供與 JUnit 4 的兼容等。目前,我們已經有了一個可以工作的 Gradle 插件和 Maven Surefire 插件。這兩個項目都計划在接下來的時間里交給各自的社區去開發和維護。

在如何集成這兩個構建工具(GradleMaven)的插件上,已經各有一個示例代碼庫。更多細節請前往 官方用戶指南

命令行支持也不賴

如果你覺得你就想靜靜地跑個測試,上面介紹的 IDE 和構建工具都太復雜了,那么建議你試下這個 控制台 launcher,它支持你直接在命令行運行測試。要使用它,請 下載這個 zip 包

遺憾的是,它 還需要你做些配置,而非拿來即用的。你需要將上面提到的兩個包 junit-jupiter-apijunit-jupiter-engine 移動到 lib 目錄下,並編輯 bin 下執行腳本的 classpath 使其指向你的 lib 目錄:CLASSPATH=$APP_HOEM/lib/*。這樣該 launcher 才能運行。

不考慮其他依賴的話,這個執行腳本大概長得像這樣:

# run all tests
junit-platform-console -p ${path_to_compiled_test_classes} -a
# run a specific test
junit-platform-console
	-p ${path_to_compiled_test_classes}
	org.codefx.demo.junit5.HelloWorldTest

向下兼容性

你可能注意到了,JUnit 5 啟用了新的包名:org.junit.jupiterorg.junit.platformorg.junit.vintage (這個包我們尚未談到)。我們待會再討論它們的含義,現在我們只需知道,這意味着你可以在一個項目中使用不同的 JUnit 版本,這就夠了。

允許在同個項目中使用多個版本的 JUnit 來進行測試,這使得你能緩緩遷移到 JUnit 5上。關於遷移,我們在探討 JUnit 新的架構 時會再回顧這個話題。

通過異常(exceptions)於 JUnit 交互的測試庫,諸如 Hamcrest 和 AssertJ 等,易燃可以在 JUnit 的新版本下工作。這里有個使用 Mockito 和 AssertJ 寫的 HelloWorldTest 測試,有興趣的同學可以看下。

回顧

在這篇 JUnit 5 環境搭建的文章中,我們介紹了 junit-jupiter-apijunit-jupiter-engine 兩個包,在項目中使用了 junit-platform-runner ,寫了第一個最簡單的測試用例,並將它作為 JUnit 4 測試套件的一部分運行了起來。

下篇文章 我會討論使用 JUnit 5 撰寫測試的一些基礎知識。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM