欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
关于《JUnit5学习》系列《JUnit5学习》系列旨在通过实战提升SpringBoot环境下的单元测试技能,一共八篇文章,链接如下:
基本操作
Assumptions类
Assertions类
按条件执行
标签(Tag)和自定义注解
参数化测试(Parameterized Tests)基础
参数化测试(Parameterized Tests)进阶
综合进阶(终篇)
本篇概览本文是《JUnit5学习》系列的终篇,将JUnit5提供的一些高级特性以实战的形式展现出来;
JUnit5的特性非常多,《JUnit5学习》系列也只是将常用部分写出来,未能覆盖全部;
本文由以下章节组成:
版本设置
测试方法展现名称生成器
重复测试
嵌套
动态测试(Dynamic Tests)
多线程并发执行测试方法
源码下载如果您不想编码,可以在GitHub下载所有源码,地址和链接信息如下表所示:
名称 链接 备注项目主页 https://github.com/zq2599/blog_demos 该项目在GitHub上的主页
git仓库地址(https) https://github.com/zq2599/blog_demos.git 该项目源码的仓库地址,https协议
git仓库地址(ssh) git@github.com:zq2599/blog_demos.git 该项目源码的仓库地址,ssh协议
这个git项目中有多个文件夹,本章的应用在junitpractice文件夹下,如下图红框所示:
junitpractice是父子结构的工程,本篇的代码在advanced子工程中,如下图:
版本设置《JUnit5学习》系列的代码都在用SpringBoot:2.3.4.RELEASE框架,间接依赖的JUnit版本是5.6.2;
本文有两个特性要求JUnit版本达到5.7或者更高,它们是测试方法展现名称生成器和动态生成测试方法;
对于使用SpringBoot:2.3.4.RELEASE框架的工程,如果要指定JUnit版本,需要做以下三步操作:
dependencyManagement节点添加junit-bom,并指定版本号:
<dependencyManagement> <dependencies> <dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.7.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>排除spring-boot-starter-test和junit-jupiter的间接依赖关系:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> </exclusion> </exclusions> </dependency>添加junit-jupiter依赖,此时会使用dependencyManagement中指定的版本号:
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <scope>test</scope> </dependency>如下图,刷新可见已经用上了5.7.0版本:
版本问题解决了,接下来正式进入进阶实战;
测试方法展现名称生成器(Display Name Generators)把Display Name Generators翻译成测试方法展现名称生成器,可能刷新了读者们对本文作者英文水平的认知,请您多包含...
先回顾一下如何指定测试方法的展现名称,如果测试方法使用了@DisplayName,在展示单元测试执行结果时,就会显示@DisplayName指定的字符串,如下图所示:
3. 除了用@DisplayName指定展示名称,JUnit5还提供了一种自动生成展示名称的功能:@DisplayNameGeneration,来看看它是如何生成展示名称的;
4. 演示代码如下所示,当@DisplayNameGeneration的value设置为ReplaceUnderscores时,会把方法名的所有下划线替换为空格: package com.bolingcavalry.advanced.service.impl; import org.junit.jupiter.api.DisplayNameGeneration; import org.junit.jupiter.api.DisplayNameGenerator; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) public class ReplaceUnderscoresTest { @Test void if_it_is_zero() { } }
执行结果如下图,方法if_it_is_zero展示出的名字为if it is zero: