「译」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 版),加上已经 ...
随机推荐
- 《Web 前端面试指南》1、JavaScript 闭包深入浅出
闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...
- Taurus.MVC 2.0 开源发布:WebAPI开发教程
背景: 有用户反映,Tausus.MVC 能写WebAPI么? 能! 教程呢? 嗯,木有! 好吧,刚好2.0出来,就带上WEBAPI教程了! 开源地址: https://github.com/cyq1 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- HTTP常用状态码分析
不管是面试还是工作中,经常会碰到需要通过HTTP状态码去判断问题的情况,比如对于后台RD,给到前端FE的一个接口,出现502或者504 error错误,FE就会说接口存在问题,如果没有知识储备,那就只 ...
- 讓TQ2440也用上設備樹(1)
作者:彭東林 郵箱:pengdonglin137@163.com QQ:405728433 開發板 TQ2440 + 64MB 內存 + 256MB Nand 軟件 Linux: Linux-4.9 ...
- 普通程序员如何转向AI方向
眼下,人工智能已经成为越来越火的一个方向.普通程序员,如何转向人工智能方向,是知乎上的一个问题.本文是我对此问题的一个回答的归档版.相比原回答有所内容增加. 一. 目的 本文的目的是给出一个简单的,平 ...
- LINQ to SQL Where条件
1. 适用场景 实现条件的过滤和查询等功能. 2. 说明 跟SQL语句中的where作用相似,都起到了范围的限定即过滤的作用,而判断条件是紧跟后面的条件子句.where主要分为三种形式:简单形式.条件 ...
- MFC中成员变量的声明顺序与析构顺序
第一次用博客,第一篇随笔,就写今天遇到的一个问题吧. 在VS2008的MFC对话框程序,窗口成员变量的声明顺序与其析构顺序相反,即,先声明的变量后析构,后声明的变量先析构.未在其他模式下测试. cla ...
- 微信公众号开发(一)--验证服务器地址的Java实现
现在主流上都用php写微信公众号后台,其实作为后端语言之一的java也可以实现. 这篇文章将对验证服务器地址这一步做出实现. 参考资料:1.慕课网-<初识java微信公众号开发>,2.微信 ...
- JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...