JUnit 5:安装,构建工具支持和编写第一个测试

JUnit 5: Setup, Build Tool Support, and Writing Your First Test

2015年11月,JUnit Lambda团队展示了他们的原型。 此后,该项目更名为JUnit 5,并于2016年2月发布了Alpha版本。我们将在一系列简短文章中进行探讨:

  • 设定

  • 基本

  • 建筑

  • 条件

  • 注射

  • 本章讨论JUnit 5的设置,以便您可以针对新API编写代码并在IDE或构建工具中运行测试。

    总览

    您将在此处阅读的大多数内容以及更多内容都可以在新兴的JUnit 5用户指南中找到。 请注意,它基于Alpha版本,因此可能会发生变化。

    确实,我们鼓励我们提出问题或提出请求,以便JUnit 5可以进一步改进。 请利用这个机会! 这是帮助JUnit帮助我们的机会。

    如有必要,此帖子将得到更新。 我在这里显示的代码示例可以在Github上找到。

    写作测试

    junit5-api构件中包含用于编写测试的API。 编写测试只需要使用您喜欢的构建工具将其包含在项目中即可。

  • 组ID :org.junit5

  • 工件ID :junit5-api

  • 版本:5.0.0-ALPHA

  • 要使用一些东西,让我们快速创建第一个测试:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package org.codefx.demo.junit5;

    import org.junit.gen5.api.Test;

    class HelloWorldTest {

    @Test
    void helloJUnit5() {
    System.out.println("Hello, JUnit 5.");
    }

    }

    见妈,不公开! 酷吧? 我目前不会讨论它,但是下一篇文章将讨论这个(以及其他基础知识),所以请继续关注。

    运行测试

    随着JUnit 5的不断发展,缺乏对本机工具的支持。 但是有一些准备工作可以使一切正常运行。

    JUnit 4运行器

    作为JUnit 4运行的一部分,可以使用称为JUnit5的测试运行程序来运行新测试。 您将在自己的工件中找到它,必须将其添加到项目中:

  • 组ID :org.junit5

  • 工件ID :junit4-runner

  • 版本:5.0.0-ALPHA

  • 运行程序将调用实际运行JUnit 5测试的引擎。 引擎还具有自己的工件,您必须添加以下工件:

  • 组ID :org.junit5

  • 工件ID :junit5-engine

  • 版本:5.0.0-ALPHA

  • 要运行项目中的所有测试,最简单的为其创建测试套件的方法是:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    package org.codefx.demo.junit5;

    import org.junit.gen5.junit4.runner.JUnit5;
    import org.junit.gen5.junit4.runner.Packages;
    import org.junit.runner.RunWith;

    @RunWith(JUnit5.class)
    @Packages({"org.codefx.demo.junit5" })
    public class TestWithJUnit5 { }

    请注意,该类必须是常规的JUnit 4测试类,即它必须遵守通用的命名约定,并且必须是公共的。 @ Packages-annotation将包解释为层次结构,因此它将在所有以org.codefx.demo.junit5为前缀的包中运行所有测试。 如果愿意,可以直接在JUnit 5测试类上使用相同的运行器。 在这种情况下,它们必须是公开的。

    现在我们完成了! 您最喜欢的IDE和构建工具将愉快地运行带有@RunWith(JUnit5.class)注释的类,从而运行新的JUnit 5测试。

    在真正的JUnit 5支持出现之前,某些功能可能无法使用,例如 IDE不会运行单独的测试方法。 但是暂时,我发现这是最简单,最不依赖工具的解决方案。

    生成工具支持

    JUnit团队已经在努力实现对JUnit 5的构建工具支持,即不通过JUnit 4绕行。一个基本的Gradle插件和Maven Surefire提供程序已启动并正在运行。 这两个项目都计划在某个时候移交给各自的社区。

    两者都有示例项目(Gradle,Maven)。 有关更多详细信息,请参阅用户指南。

    命令行的胜利!

    如果所有这些对您来说太花哨了,请尝试使用控制台运行程序,它可以让您直接从命令行运行测试。 要掌握它,可以下载此ZIP。

    不幸的是,它开箱即用。 我不得不将上面提到的junit5-api和junit5-engine工件放到lib中,然后在bin中的脚本中将classpath定义编辑为CLASSPATH = $ APP_HOME / lib / *,以使其工作。

    忽略其他依赖项(例如,在其他测试库上),可以按以下方式使用它:

    使用junit控制台

    1
    2
    3
    4
    5
    6
    # run all tests
    junit-console -p ${path_to_compiled_test_classes} -a
    # run a specific test
    junit-console
    -p ${path_to_compiled_test_classes}
    org.codefx.demo.junit5.HelloWorldTest

    兼容性

    您可能已经注意到,JUnit 5占用了一个新的名称空间:org.junit.gen5。 这意味着当在同一项目中使用不同的JUnit版本时,不会有冲突。

    实际上,一个项目可以包含并运行来自不同版本的测试而不会出现问题,这允许缓慢迁移到JUnit5。我们在研究JUnit的新体系结构时将重新讨论该主题。

    通过异常与JUnit通信的测试库(如Hamcrest和AssertJ)将继续在新版本中工作。 使用Mockito和AssertJ查看完整的HelloWorldTest版本示例。

    反射

    对于我们的JUnit 5设置,我们在项目中包括了junit5-api,junit5-engine和junit4-runner,编写了第一个最小测试用例,并将其作为JUnit 4测试套件的一部分运行。

    下一篇文章将探讨如何在JUnit 5中编写测试的基础知识。

    分享与关注

    你喜欢这个帖子吗? 然后与您的朋友和关注者分享! 如果您喜欢我在写的内容,为什么不跟随我-