博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JUnit 5 – 早期试用体验 – 第1篇
阅读量:6208 次
发布时间:2019-06-21

本文共 3015 字,大约阅读时间需要 10 分钟。

\

主要结论

\
  • JUnit 5就要来了! \
  • 其中包含改进的API和扩展模型将大幅完善“JUnit工具”。 \
  • 模块化的体系结构使得“JUnit平台”可以用于其他测试框架。 \
  • 虽然经过了彻底重写,但可在同一个代码基中与老版本Junit共存。
\

由专职开发者组成的团队目前正在着手开发JUnit 5,这一Java世界最受欢迎程序库的下个版本。虽然表面上只是陆续提供一些细枝末节的改进,但内部创新非常多,甚至有望重新定义JVM测试。 \

2015年11月发布并在2016年2月发布后,7月的第一周他们了。我们打算体验一下! \

在该系列的第一篇文章中,我们将介绍如何开始编写测试,介绍新版本包含的所有细微改进,讨论JUnit团队为何决定现在进行重写,此外最重要的是,还将介绍新的体系结构如何彻底革新JVM测试。 \

该系列的第二篇文章将更深入地介绍如何运行测试,介绍JUnit提供的一些炫酷新功能,并演示如何对核心能力进行扩展。 \

编写测试

\

首先从媒体资源开始看看如何快速写出需要的测试。 \

五秒钟设置完毕

\

下文还将更为深入地介绍配置和体系结构。现在先看看如何将这些内容导入我们选择的构建工具:

org.junit.jupiter:junit-jupiter-api:5.0.0-M1\org.junit.jupiter:junit-jupiter-engine:5.0.0-M1\org.junit.platform:junit-platform-runner:1.0.0-M1
\

就这么简单,一旦完整的JUnit 5支持彻底实现,只需要junit-jupiter-api就够了。(下文将进一步介绍) \

随后需要一个用来包含这个测试的类:

package com.infoq.junit5;\\import org.junit.platform.runner.JUnitPlatform;\import org.junit.runner.RunWith;\\@RunWith(JUnitPlatform.class)\public class JUnit5Test {\    // tests go here\}
\

至此已经全部搞定,可以开始编写JUnit 5测试并通过IDE或构建工具执行。 \

一个简单示例

\

对于较为简单的测试,几乎没什么太大变化:

@RunWith(JUnitPlatform.class)\public class JUnit5Test {\\    @BeforeAll\    static void initializeExternalResources() {\     System.out.println(\"Initializing external resources...\");\    }\\    @BeforeEach\    void initializeMockObjects() {\     System.out.println(\"Initializing mock objects...\");\    }\\    @Test\    void someTest() {\     System.out.println(\"Running some test...\");\     assertTrue(true);\    }\\    @Test\    void otherTest() {\     assumeTrue(true);\\     System.out.println(\"Running another test...\");\     assertNotEquals(1, 42, \"Why wouldn't these be the same?\");\    }\\    @Test\    @Disabled\    void disabledTest() {\     System.exit(1);\    }\\    @AfterEach\    void tearDown() {\     System.out.println(\"Tearing down...\");\    }\\    @AfterAll\    static void freeExternalResources() {\     System.out.println(\"Freeing external resources...\");\    }\\}
\

表面上JUnit 5只是陆续提供一些细枝末节的改进,但真正的革新都在内部,稍后会介绍这些内容。首先一起来看看这一版本中一些最显著的改进。 \

诸多改进

\

可见性

\

最显著的变化是,测试方法不再必须设置为公开的。这就针对程序包提供了足够的可见性(但私有测试无法实现),借此可以避免测试类充斥着乱七八糟的公开关键字。 \

理论上,测试类也可以使用默认可见性。但因为上文使用了简单的配置过程,我们的工具只能在公开的类中扫描注解(Annotation),JUnit 5的支持彻底实现后这一情况将有所改善。 \

测试生命周期

\

@Test \

JUnit 4最基本的注解是@Test,可用于标记作为测试运行的方法。 \

该注解几乎没什么变化,不过已经不再接受可选参数,预期异常可通过断言(Assertion)进行验证。(但目前还没有超时的替代品) \

Before和After

\

为了运行代码以配置并取消测试,可以使用@BeforeAll@BeforeEach@AfterEach,以及@AfterAll。它们的名称变得更恰当,但与JUnit 4中的@BeforeClass@Before@After,以及@AfterClass使用了完全相同的语义。 \

因为每个测试都需要新建一个实例,并且@BeforeAll / @AfterAll只能对它们统一调用一次,可能无法确定要使用哪个实例,因此只能将其设置为静态(与JUnit 4中的@BeforeClass@AfterClass情况类似)。 \

如果使用同一个注解标注了不同方法,将刻意使用未指定的顺序执行。 \

禁用测试

\

测试可直接使用@Disabled禁用,这一点类似于JUnit 4中的@Ignored。但这只是特殊情况的Condition,下文介绍JUnit的扩展时还将详细讨论。 \

断言

\

一切配置并执行完毕后,最后需要通过断言验证期望行为。这一领域也有很多细微的改进: \

  • 断言消息已经可以包含在参数列表中,这样即可用更为统一的方式执行包含或不包含消息的调用,因为前两个参数始终是预期的实际值,随后才是可选参数。 \
  • 使用Lambda将能更自由地创建断言消息,如果创建过程耗时长久,这一点有助于提高性能。 \
  • 布尔(Boolean)断言已经可以接受谓语。

另外还有新增的assertAll,可用于检查一组相关调用(Invocation)的结果,并判断断言是否失败,虽然无法短路但可输出所有结果的值:

@Test\void assertRelatedProperties() {\    Developer dev = new Developer(\"Johannes\

转载地址:http://pezja.baihongyu.com/

你可能感兴趣的文章
配置yum,nc,telnet
查看>>
nib和xib的区别
查看>>
== 和 is 的区别
查看>>
Apple Swift编程语言新手教程
查看>>
linux服务器加入windows域时报错Ticket expired
查看>>
2018年,牛客网小白月赛5
查看>>
sql 锁
查看>>
生死相依:说说JQuery中die()、live()详解[翻译]
查看>>
UML建模工具Visio 、Rational Rose、PowerDesign的比较
查看>>
压缩映象原理的一个应用
查看>>
一个疑难故障,坑了我半年青春-----知识就是生产力
查看>>
javascript控制页面(含iframe进行页面跳转)跳转、刷新的方法汇总
查看>>
JAVA常见算法题(九)
查看>>
leetcode解题文件夹
查看>>
MySQL复制原理-加强版
查看>>
dotnet 命令实战
查看>>
Hbase集群扩展
查看>>
C语言之归并排序
查看>>
绘制loss曲线
查看>>
进程的处理器亲和性和 vCPU 的绑定(查看cpu信息,超线程等)
查看>>