V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
linesh
V2EX  ›  程序员

「译」JUnit 5 系列:环境搭建

  •  
  •   linesh ·
    linesh-simplicity · 2016-09-17 20:55:46 +08:00 · 1912 次点击
    这是一个创建于 3018 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文地址: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 插件。这两个项目都计划在接下来的时间里交给各自的社区去开发和维护。

    在如何集成这两个构建工具(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 撰写测试的一些基础知识。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1680 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:24 · PVG 00:24 · LAX 08:24 · JFK 11:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.