原文地址: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 团队提供了一个 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 没法运行单独的测试等。不过目前为止,这是我发现的最简单而且在多平台下均工做良好的方案了。
Intellij IDEA 2016.2 开始 对 JUnit 5 有了基本的支持。尽管支持还不是很完美,而且还需时刻关注 JUnit 5 的发展,不过毕竟最基本的支持有了,如今使用 JUnit 5 已经简单得多了。
Eclipse 方面团队 仍在着手于内置支持的开发。
JUnit 团队在为构建工具提供 JUnit 5 支持的基础上已经作了大量的工做,好比提供与 JUnit 4 的兼容等。目前,咱们已经有了一个能够工做的 Gradle 插件和 Maven Surefire 插件。这两个项目都计划在接下来的时间里交给各自的社区去开发和维护。
在如何集成这两个构建工具(Gradle和Maven)的插件上,已经各有一个示例代码库。更多细节请前往 官方用户指南 。
若是你以为你就想静静地跑个测试,上面介绍的 IDE 和构建工具都太复杂了,那么建议你试下这个 控制台 launcher,它支持你直接在命令行运行测试。要使用它,请 下载这个 zip 包。
遗憾的是,它 还须要你作些配置,而非拿来即用的。你须要将上面提到的两个包 junit-jupiter-api
和 junit-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.jupiter
、org.junit.platform
和 org.junit.vintage
(这个包咱们还没有谈到)。咱们待会再讨论它们的含义,如今咱们只需知道,这意味着你能够在一个项目中使用不一样的 JUnit 版本,这就够了。
容许在同个项目中使用多个版本的 JUnit 来进行测试,这使得你能缓缓迁移到 JUnit 5上。关于迁移,咱们在探讨 JUnit 新的架构 时会再回顾这个话题。
经过异常(exceptions)于 JUnit 交互的测试库,诸如 Hamcrest 和 AssertJ 等,易燃能够在 JUnit 的新版本下工做。这里有个使用 Mockito 和 AssertJ 写的 HelloWorldTest
测试,有兴趣的同窗能够看下。
在这篇 JUnit 5 环境搭建的文章中,咱们介绍了 junit-jupiter-api
和 junit-jupiter-engine
两个包,在项目中使用了 junit-platform-runner
,写了第一个最简单的测试用例,并将它做为 JUnit 4 测试套件的一部分运行了起来。
下篇文章 我会讨论使用 JUnit 5 撰写测试的一些基础知识。