JUnit5学习之八:综合进阶(终篇)

欢迎访问我的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:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppfgd.html