![dc7409be327ac26ef522f3c5e6d52f8b.png](https://i-blog.csdnimg.cn/blog_migrate/449d945c913b861f861729305093f270.jpeg)
作者 | Mert Çalışkan
译者 | IT外文选刊
Unit 5.6的新功能让测试变得更加简单
定义测试执行顺序和并行运行测试的能力等新功能使其成为一个重要的版本。
JUnit,这个被广泛使用的Java单元测试框架,在2017年的时候,JUnit 5有了一个重要的里程碑式的发布,在4.x版本上进化了10年后,JUnit 5.0.0大版本发布后,JUnit团队制定了快速的开发节奏,每隔四五个月就会有新的小版本发布;最新的小版本是2020年1月20日的5.6.0,并在3月22日更新到5.6.1。
我将重新审视这个框架,通过代码示例来展示它带来的最新功能。我还在相关功能的描述上标注了”(5.x以来)”,以强调这些功能是在哪个版本中引入框架的。
首先是一个快速的术语定义。JUnit 5由三个独立的模块组成。
- JUnit平台是在JVM中启动测试框架的基础;它被许多IDE和构建工具所支持。
- JUnit Jupiter是最新的编程模型,也是JUnit 5测试的TestEngine。
- 最后,还有JUnit Vintage,它是针对老的JUnit 3和JUnit 4测试的TestEngine。
(编者注:如果你的工具箱里有JUnit 4测试,请阅读Brian McGlauflin的《从JUnit 4迁移到JUnit 5:重要的区别和好处》)
如果你使用的是Maven,可以很容易地添加JUnit 5.6的依赖关系,如Listing 1所示。
Listing 1
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.6.0</version>
<scope>test</scope>
</dependency>
如果你在使用Gradle,可以添加依赖关系,如Listing 2所示。
Listing 2
testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.6.0'
下面我们就来说说新功能吧!
定义测试执行的顺序
你可以通过给定的@Order注解(从5.4开始),或者通过自定义顺序,在给定的类的测试方法之间随机定义一个执行顺序。@TestMethodOrder注解(从5.4开始)是一个类级别上的注解,可以实现你想应用的顺序。
根据方法名称以字母数字方式执行测试方法,如Listing 3所示。
Listing 3
@TestMethodOrder(MethodOrderer.Alphanumeric.class)
class OrderedTest {
@Test
void testC() {
System.out.println("Test C");
}
@Test
void testZ() {
System.out.println("Test Z");
}
@Test
void testA() {
System.out.println("Test A");
}
}
在Listing 3中,执行顺序如下:testA() -> testC() -> testZ()。
也可以用定义@TestMethodOrder(MethodOrderer.Random.class)来定义一个随机的