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 ...
随机推荐
- vi/vim输入中文乱码,无法输入中文解决方法
vi/vim输入中文乱码,无法输入中文解决方法 编辑/etc/vimrc或者/etc/virc,加入以下内容即可 set encoding=UTF-8 set langmenu=zh_CN.UTF-8 ...
- centos7 安装Anaconda3及使用
centos7 安装Anaconda3及使用原创wangshu_liang 最后发布于2019-01-31 14:08:23 阅读数 1046 收藏展开最近在服务器上安装了anaconda3,先简单说 ...
- 030. Python装饰器
一 装饰器 1.1 装饰器介绍 扩展函数新功能的@定义:替换旧函数,返回新函数,在不改变原有代码的前提下,为该函数扩展新功能;语法:@ (语法糖) 1.2 装饰器的原型 def show(func) ...
- Docker-Compose入门-(转载)
Compose 是一个用户定义和运行多个容器的 Docker 应用程序.在 Compose 中你可以使用 YAML 文件来配置你的应用服务.然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务 ...
- 8.2-3 partprobe、tune2fs
8.2 partprobe:更新内核的硬盘分区表信息 partprobe命令用于在硬盘分区发生改变时,更新Linux内核中的硬盘分区表数据.有时在使用fdisk.part命令对硬盘进行分区 ...
- 安装beanstalkd队列问题——No package beanstalkd available
CentOS7.4安装beanstalkd 时无可用源 No package beanstalkd availableError:Nothing to do 可从以下获取:wget /etc/yum. ...
- kylin的rowkey优化之按维度分片
我们知道,系统会对cuboid的数据进行分片处理. 但是默认的分片策略是随机的,如果group by a,b 的查询命中了某个cuboid,但是a=1 and b=1 的两条数据在不同的机器上存储, ...
- GO学习-(37) 使用Air实现Go程序实时热重载
使用Air实现Go程序实时热重载 今天我们要介绍一个神器--Air能够实时监听项目的代码文件,在代码发生变更之后自动重新编译并执行,大大提高gin框架项目的开发效率. 为什么需要实时加载? 之前使用P ...
- Asp.Net Core Api 使用Swagger管理文档教程的安装与使用
这周因为公司的需求需要我做一个Api的程序,这周的三天时间我一直在Core Api和 framework Api之间做纠结.不知道要使用哪一个去做项目,想着想着就决定了.既然两个我都没用过那个何不来使 ...
- springboot 优雅的启动类
优雅的sprongboot启动类 package fama.cost.server; import fama.cost.common.IStoppable; import fama.cost.comm ...