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

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

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

(若是不喜歡看文章,你能夠戳這裏看個人演講,或者看一下最近的 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 撰寫測試的一些基礎知識。

相關文章
相關標籤/搜索