「译」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 插件。这两个项目都计划在接下来的时间里交给各自的社区去开发和维护。
在如何集成这两个构建工具(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 撰写测试的一些基础知识。
「译」JUnit 5 系列:环境搭建的更多相关文章
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- 「译」JUnit 5 系列:架构体系
原文地址:http://blog.codefx.org/design/architecture/junit-5-architecture/ 原文日期:29, Mar, 2016 译文首发:Linesh ...
- 「译」JUnit 5 系列:基础入门
原文地址:http://blog.codefx.org/libraries/junit-5-basics/ 原文日期:25, Feb, 2016 译文首发:Linesh 的博客:JUnit 5 系列: ...
- 「MoreThanJava」Day 1:环境搭建和程序基本结构元素
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- jvm系列(十):如何优化Java GC「译」
本文由CrowHawk翻译,是Java GC调优的经典佳作. 本文翻译自Sangmin Lee发表在Cubrid上的"Become a Java GC Expert"系列文章的第三 ...
- jvm系列(七):如何优化Java GC「译」
本文由CrowHawk翻译,地址:如何优化Java GC「译」,是Java GC调优的经典佳作. Sangmin Lee发表在Cubrid上的”Become a Java GC Expert”系列文章 ...
- 「译」JavaScript 的怪癖 1:隐式类型转换
原文:JavaScript quirk 1: implicit conversion of values 译文:「译」JavaScript 的怪癖 1:隐式类型转换 译者:justjavac 零:提要 ...
- iOS 9,为前端世界都带来了些什么?「译」 - 高棋的博客
2015 年 9 月,Apple 重磅发布了全新的 iPhone 6s/6s Plus.iPad Pro 与全新的操作系统 watchOS 2 与 tvOS 9(是的,这货居然是第 9 版),加上已经 ...
随机推荐
- “.Net 社区虚拟大会”(dotnetConf) 2016 Day 3 Keynote: Scott Hanselman
美国时间 6月7日--9日,为期三天的微软.NET社区虚拟大会正式在 Channel9 上召开,美国时间6.9 是第三天, Scott Hanselman 做Keynote.今天主题围绕的是.NET ...
- 干货分享:SQLSERVER使用裸设备
干货分享:SQLSERVER使用裸设备 这篇文章也适合ORACLE DBA和MYSQL DBA 阅读 裸设备适用于Linux和Windows 在ORACLE和MYSQL里也是支持裸设备的!! 介绍 大 ...
- 【Win 10 应用开发】启动远程设备上的应用
这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...
- Node.js:Buffer浅谈
Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...
- [C#] 走进异步编程的世界 - 开始接触 async/await
走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $&qu ...
- java设计模式之--单例模式
前言:最近看完<java多线程编程核心技术>一书后,对第六章的单例模式和多线程这章颇有兴趣,我知道我看完书还是记不住多少的,写篇博客记录自己所学的只是还是很有必要的,学习贵在坚持. 单例模 ...
- Ajax使用WCF实现小票pos机打印源码
通过ajax跨域方式调用WCF服务,实现小票pos机的打印,源码提供web方式,客户端方式测试,服务驻留右侧底部任务栏,可控制服务开启暂停,用户可自定义小票打印模板,配合零售录入. qq 22945 ...
- 我大中华微软MVP中国区人才库
刘海峰:国内知名微软开源技术网站51Aspx 创始人,十年以上的Asp.net从业经验,微软MSDN特约讲师.Teched讲师.ImagineCup大赛评委.人大出版社研修班特约讲师,曾多次受邀访问美 ...
- Postman - 功能强大的 API 接口请求调试和管理工具
Postman 是一款功能强大的的 Chrome 应用,可以便捷的调试接口.前端开发人员在开发或者调试 Web 程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的 Fi ...
- BPM任务管理解决方案分享
一.方案概述任务是企业管理者很多意志的直接体现,对于非常规性事务较多的企业,经常存在各类公司下达的各种任务跟进难.监控难等问题,任务不是完成效果不理解,就是时间超期,甚至很多公司管理层下达的任务都不了 ...