JUnit5的Tag、Filter、Order、Lifecycle
Tag
JUnit5可以使用@Tag
注解给测试类和测试方法打tag,这些tag能用来在执行时进行过滤,它跟group有点类似。
tag应该遵循以下规则:
- 不能为null或者为空。
- 不能包含空格。
- 不能包含ISO控制字符。
- 不能包含保留字符:
,
(
)
&
|
!
示例代码:
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Tag("fast")
@Tag("model")
class TaggingDemo {
@Test
@Tag("taxes")
void testingTaxCalculation() {
}
}
@Tag
还可以通过元注解和组合注解,实现自定义注解,参考:https://dongfanger.gitee.io/blog/JUnit/002-JUnit5注解学习指引.html#id2
Filter
打好了tag后,在执行时可以进行过滤,比如Maven配置:
<!-- ... -->
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<groups>acceptance | !feature-a</groups>
<excludedGroups>integration, regression</excludedGroups>
</configuration>
</plugin>
</plugins>
</build>
<!-- ... -->
groups用来指定包含哪些tag,excludedGroups用来指定排除哪些tag。
Order
JUnit5默认使用了某种算法来确定test方法的执行顺序。我们可以通过@TestMethodOrder
进行自定义,既可以使用内置类,也可以使用实现了MethodOrderer接口的类。
内置类如下:
- DisplayName 按DisplayName的字母数字顺序
- OrderAnnotation 通过
@Order
注解指定顺序 - Random 随机顺序
- Alphanumeric 按test方法名和参数列表的字母数字顺序
示例:
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
@TestMethodOrder(OrderAnnotation.class)
class OrderedTestsDemo {
@Test
@Order(1)
void nullValues() {
// perform assertions against null values
}
@Test
@Order(2)
void emptyValues() {
// perform assertions against empty values
}
@Test
@Order(3)
void validValues() {
// perform assertions against valid values
}
}
也可以配置全局的JUnit5的默认执行顺序,比如在src/test/resources/junit-platform.properties
中:
junit.jupiter.testmethod.order.default = \
org.junit.jupiter.api.MethodOrderer$OrderAnnotation
Lifecycle
JUnit5默认会在执行测试方法前给每个测试类创建一个实例对象,让测试方法相互独立,这叫做per-method
测试实例生命周期。
就算测试方法被disable了也会创建实例。
如果想让每个测试类只创建一个实例对象,测试方法共用这一个实例,那么可以使用注解@TestInstance(Lifecycle.PER_CLASS)
,这叫做pre-class
测试实例生命周期。
pre-class
有一些好处,比如:
- 在实例中存储变量,然后通过
@BeforeEach
或@AfterEach
修改。 @BeforeAll
、@AfterAll
可以作用于非静态方法和接口default
方法。@BeforeAll
、@AfterAll
可以作用于@Nested
嵌套测试类。
有两种方式可以设置全局的生命周期模式,第一种是JVM启动参数:
-Djunit.jupiter.testinstance.lifecycle.default=per_class
第二种方式是配置文件,比如src/test/resources/junit-platform.properties
:
junit.jupiter.testinstance.lifecycle.default = per_class
如果要进行全局配置,建议使用配置文件,这样在出现问题时方便进行追溯。
小结
本文首先介绍了给测试类和测试方法打tag进行分组,然后可以在运行时根据tag进行过滤,接着介绍了如何制定测试方法的执行顺序,最后介绍了两种生命周期:per-method
和pre-class
。
参考资料:
https://junit.org/junit5/docs/current/user-guide/#writing-tests-tagging-and-filtering
https://junit.org/junit5/docs/current/user-guide/#writing-tests-test-execution-order
https://junit.org/junit5/docs/current/user-guide/#writing-tests-test-instance-lifecycle
JUnit5的Tag、Filter、Order、Lifecycle的更多相关文章
- html tag filter in js
html tag filter in js const html = `可当天预订,必须21时15分之前下单,要求必须<font color=green><b>60</b ...
- How to define Servlet filter order of execution using annotations
If we define Servlet filters in web.xml, then the order of execution of the filters will be the same ...
- Filter execute order in asp.net web api
https://stackoverflow.com/questions/21628467/order-of-execution-with-multiple-filters-in-web-api Som ...
- Sallen-Key Active Butterworth Low Pass Filter Calculator
RC 2nd Order Passive Low Pass Filter The cut-off frequency of second order low pass filter is given ...
- Spring boot下添加filter
https://www.cnblogs.com/OnlyCT/p/7133639.html ****************************************************** ...
- SpringBoot(四)-- 整合Servlet、Filter、Listener
SpringBoot中有两种方式可以添加 Servlet.Filter.Listener. 1.代码注册 通过ServletRegistrationBean. FilterRegistrationBe ...
- 简说MVC Filter
Filter与FilterProvider之间的关系 根据用途和执行时机的不同,MVC主要分为以下5种类型的过虑器:AuthenticationFilter.AuthorizationFilter.A ...
- Spring boot 学习八 Springboot的filter
一: 传统的javaEE增加Filter是在web.xml中配置,如以下代码: <filter> <filter-name>TestFilter</filter-nam ...
- springboot 通过@WebFilter(urlPatterns )配置Filter过滤路径
springboot 通过@WebFilter(urlPatterns )配置Filter过滤路径,没有配置/*,输入任何路径都能进过滤器 2019年04月25日 12:51:33 peigui.hu ...
随机推荐
- 第35章-CentOS7实战
补充安装软件包 yum -y install vim lrzsz bash-completion telnet nmap 关闭selinux:/etc/selinux/config 关闭防火墙:sys ...
- JavaWeb Session 状态管理
引言 HTTP 协议是一个无状态的协议,简单理解就是两次请求/响应无法记录或保存状态信息.但是动态 Web 项目开发是需要保存请求状态的,比如用户的登录状态,但 HTTP 协议层不支持状态保存,所以需 ...
- BUCK BOOST学习总结
首先对于我这种电源方面的小白来说 关于电源用的最多的就是线性稳压了 开关类的如 TI 的TPS系列 我是只知道应用电路而不知道具体原理的 但是长此以往也不是个办法 于是今天就带打家详细的来讲一下 ...
- 国外DIY网站
https://site.douban.com/109950/widget/notes/250072/note/248811721/
- MindSpore激活函数总结与测试
技术背景 激活函数在机器学习的前向网络中担任着非常重要的角色,我们可以认为它是一个决策函数.举个例子说,我们要判断一个输出的数据是猫还是狗,我们所得到的数据是0.01,而我们预设的数据中0代表猫1代表 ...
- 大作!webpack详细配置
webpack学习之旅 好好学习 天天向上!遇到bug,不要慌! 文章目录 webpack学习之旅 大一统的模块化规范--ES6模块化 1.node.js中通过babel体验ES6模块化 2.ES6模 ...
- Ansible学习分享(基本)
背景:Teamleader提到一款好用的自动化配置管理工具,于是前去学习实践,有了下面分享. 纲要 一.Ansible简介 二.Ansible准备 2.1 Ansible安装 2.2 设置SSH公钥验 ...
- Docker学习(7) 构建镜像
构建docker镜像 1 构建镜像的两种方式 1 通过容器构建镜像 2 通过Dockerfile构建镜像
- Redis(二) 数据类型操作指令以及对应的RedisTemplate方法
1.Redis key值操作以及RedisTemplate对应的API 本文默认使用RedisTemplate,关于RedisTemplate和StringRedisTemplate的区别如下 Red ...
- 字符识别OCR原理及应用实现
字符识别OCR原理及应用实现 文本是人类最重要的信息来源之一,自然场景中充满了形形色色的文字符号.光学字符识别(OCR)相信大家都不陌生,就是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过 ...