`
sodagreen.simplicity
  • 浏览: 22481 次
文章分类
社区版块
存档分类

「译」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
    voidhelloJUnit5() {
        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-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.jupiterorg.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 撰写测试的一些基础知识。

分享到:
评论

相关推荐

    Junit4.12和依赖包

    JUnit是Java编程语言中最常用的单元测试框架之一,它极大地简化了对代码进行验证和调试的过程。Junit4.12是该框架的一个稳定版本,它包含了许多改进和新特性,使得测试更加灵活和强大。在本文中,我们将深入探讨...

    junit-jupiter-api-5.4.2-API文档-中英对照版.zip

    赠送jar包:junit-jupiter-api-5.4.2.jar; 赠送原API文档:junit-jupiter-api-5.4.2-javadoc.jar; 赠送源代码:junit-jupiter-api-5.4.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-api-5.4.2.pom; ...

    junit-4.12.rar包及依赖包

    本文将深入探讨关于"junit-4.12.rar"包及其依赖包,以及如何解决在使用JUnit 4进行单元测试时遇到的"method initializationerror not found"错误。 首先,我们来了解JUnit 4.12版本。这是JUnit的一个稳定版本,发布...

    junit-libs:junit测试包

    JUnit测试框架由Ernst Leiss和Kent Beck在1997年发起,其后不断演进,目前主要由JUnit团队维护,最新的版本是JUnit 5,它分为JUnit Jupiter、JUnit Platform和JUnit Vintage三个部分。JUnit 5对旧版本进行了重大改进...

    Junit5依赖整合包

    在导入这个"Junit5依赖整合包"后,你将可以使用Junit5的一系列新特性,例如: 1. **Lambda表达式支持**:Junit5允许使用Lambda表达式来编写简洁的测试方法,例如`assertThat(() -> someCode()).isTrue();`。 2. **...

    junit-platform-launcher-1.8.0-M1-API文档-中文版.zip

    赠送jar包:junit-platform-launcher-1.8.0-M1.jar; 赠送原API文档:junit-platform-launcher-1.8.0-M1-javadoc.jar; 赠送源代码:junit-platform-launcher-1.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-...

    使用Junit4.12需要用的两个包,官网在国内无法下载

    首先,JUnit 4.12是JUnit系列的一个版本,发布于2013年,提供了丰富的断言方法、测试注解和参数化测试等功能,极大地简化了单元测试的编写。在使用JUnit 4.12时,通常需要两个核心的jar包:junit.jar和hamcrest-core...

    junit-jupiter-engine-5.8.2-API文档-中文版.zip

    赠送jar包:junit-jupiter-engine-5.8.2.jar; 赠送原API文档:junit-jupiter-engine-5.8.2-javadoc.jar; 赠送源代码:junit-jupiter-engine-5.8.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-engine-...

    junit单元测试

    JUnit 5分为三个主要部分:JUnit Platform、JUnit Jupiter和JUnit Vintage。JUnit Platform是一个运行测试的基础架构,支持多种测试框架;JUnit Jupiter是JUnit 5的主要实现,包含了新的API和注解,如`@Test`, `@...

    junit-jupiter-api-5.8.0-M1-API文档-中英对照版.zip

    赠送jar包:junit-jupiter-api-5.8.0-M1.jar; 赠送原API文档:junit-jupiter-api-5.8.0-M1-javadoc.jar; 赠送源代码:junit-jupiter-api-5.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-api-5.8.0-...

    Junit5.zip

    JUnit5是Java编程语言中最流行的单元测试框架之一,它的最新版本带来了许多改进和新特性,使得测试更加高效和灵活。本资源包含的`junit5.jar`是JUnit5的运行库,可以用于运行使用JUnit5编写的测试用例。而`junit5-...

    junit-jupiter-api-5.8.2-API文档-中文版.zip

    赠送jar包:junit-jupiter-api-5.8.2.jar; 赠送原API文档:junit-jupiter-api-5.8.2-javadoc.jar; 赠送源代码:junit-jupiter-api-5.8.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-api-5.8.2.pom; ...

    探索JUnit4扩展:深入Rule

    《探索JUnit4扩展:深入Rule》 JUnit是Java开发者最常用的单元测试框架,它极大地简化了测试代码的编写。在JUnit4中,引入了一个强大的特性——Rule,这使得测试更加灵活且可定制化。本文将深入探讨Rule的概念、...

    junit-4.13.1.jar

    JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。

    junit5.jar

    《深入理解JUnit 5:Java单元测试框架的革新》 JUnit 5,作为Java开发者最常用的单元测试框架,是JUnit系列的最新版本,为Java测试带来了显著的改进和创新。这个名为"junit5.jar"的文件正是JUnit 5的核心库,它包含...

    junit-vintage-engine-5.6.2.jar_junit testng

    junit-vintage-engine-5.6.2.jarjunit-vintage-engine-5.6.2.jarjunit-vintage-engine-5.6.2.jar

    junit-4.11.jar

    这个版本在前一版本的基础上进行了一系列的改进和增强,使得测试工作更加高效且易用。当我们下载并解压"junit-4.11.jar"文件后,我们得到了一个可以直接运行的Java库,它包含了JUnit 4.11的所有功能。 JUnit 4.11的...

    JUnit5所需的jar包,导入完就可以用

    在Maven的pom.xml文件中,可以添加如下依赖来引入JUnit5: ```xml <groupId>org.junit.jupiter <artifactId>junit-jupiter-engine <version>5.x.y</version> <!-- 替换为最新版本 --> <scope>test ```...

    junit-4.11 jar包、源文件、操作文档

    总之,这个压缩包为Java开发人员提供了一个完整的JUnit 4.11环境,不仅包含了运行测试所需的库,还提供了源代码供学习,以及详细的使用文档,对于提升软件质量,进行有效的单元测试有着极大的价值。

    junit5-r5.5.2.zip

    《深入理解JUnit 5:基于r5.5.2版本》 JUnit,作为Java领域最常用的单元测试框架,自诞生以来就备受开发者喜爱。本文将深入解析JUnit 5的r5.5.2版本,帮助读者全面掌握其核心功能与用法。 1. **JUnit 5简介** ...

Global site tag (gtag.js) - Google Analytics