一般实践认为,自动化测试应能够独立运行且无特定顺序,并且测试结果不应依赖于先前测试的结果。 但是在某些情况下,可以证明特定的测试执行顺序是正确的,尤其是在集成或端到端测试中。

默认情况下,在JUnit 5中,测试方法的执行在构建之间是可重复的,因此是确定性的,但是该算法是故意不明显的(作为库状态的作者)。 幸运的是,可以使用内置方法定购器或通过创建自定义定购器来调整执行顺序以适应我们的需求。

org.junit.jupiter.api.TestMethodOrder

为了更改测试执行顺序,我们需要使用org.junit.jupiter.api.TestMethodOrder注释测试类,并将方法排序器的类型作为参数传递。 从JUnit 5.4开始,有三个内置的方法排序器: OrderAnnotationAlphanumericRandom 。 通过实现org.junit.jupiter.api.MethodOrderer接口,我们还可以轻松创建自己的自定义方法org.junit.jupiter.api.MethodOrderer器。

使用

 package pl.codeleak.samples.junit5.basics;  import org.junit.jupiter.api.MethodOrderer;  import org.junit.jupiter.api.Order;  import org.junit.jupiter.api.Test;  import org.junit.jupiter.api.TestMethodOrder;  @TestMethodOrder (MethodOrderer.OrderAnnotation. class )  class TestExecutionOrderWithOrderAnnotation { @Order ( 1 ) @Test void aTest() {} @Order ( 2 ) @Test void bTest() {} @Order ( 3 ) @Test void cTest() {}  } 

字母数字顺序

 @TestMethodOrder (MethodOrderer.Alphanumeric. class )  class AlphanumericTestExecutionOrder { @Test void aTest() {} @Test void bTest() {} @Test void cTest() {}  } 

随机排序

如果要确保生成之间的方法执行顺序不确定,则随机排序可能很有用。

 @TestMethodOrder (MethodOrderer.Random. class )  class AlphanumericTestExecutionOrder { @Test void aTest() {} @Test void bTest() {} @Test void cTest() {}  } 

随机方法订购者使用System.nanoTime()作为种子,但是可以使用junit.jupiter.execution.order.random.seed配置属性对其进行更改。 此属性的值应返回可以使用Long.valueOf(String)进行转换的任何String

配置种子的一种方法是在junit-platform.properties配置文件中提供配置属性:

 junit.jupiter.execution.order.random.seed= 42 

定制订购

可以通过实现org.junit.jupiter.api.MethodOrderer接口并将其作为@TestMethodOrder的参数来创建自定义方法@TestMethodOrder

下面的示例是一个方法排序器,它按名称的长度对方法进行排序:

 class MethodLengthOrderer implements MethodOrderer { private Comparator<MethodDescriptor> comparator = Comparator.comparingInt(methodDescriptor -> methodDescriptor.getMethod().getName().length()); @Override public void orderMethods(MethodOrdererContext context) { context.getMethodDescriptors().sort(comparator); }  } 

并使用:

 @TestMethodOrder (MethodLengthOrderer. class )  class CustomTestExecutionOrder { @Test void aTest() {} @Test void abTest() {} @Test void abcTest() {}  } 

摘要

在某些情况下,有一种在JUnit 5中调整测试执行顺序的方法会很有用,我很高兴看到此功能。 我相信在大多数情况下,内置方法订购者将绰绰有余。 如果没有,那么有一种实现自定义方法的简便方法。

在GitHub上找到本文中使用的示例(以及更多): https : //github.com/kolorobot/junit5-samples/tree/master/junit5-basics

翻译自: https://www.javacodegeeks.com/2019/03/test-execution-order-junit-5.html

JUnit 5中的测试执行顺序相关推荐

  1. junit 测试执行顺序_JUnit 5中的测试执行顺序

    junit 测试执行顺序 一般实践认为,自动化测试应能够独立运行且无特定顺序,并且测试结果不应依赖于先前测试的结果. 但是在某些情况下,可以证明特定的测试执行顺序是正确的,尤其是在集成或端到端测试中. ...

  2. hadoop27---netty中handler的执行顺序

    Netty是基于Java NIO的网络应用框架.Netty是一个NIO client-server(客户端服务器)框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议.Netty提供了一种 ...

  3. mysql关键字使用顺序_MySQL数据库之单表查询中关键字的执行顺序

    MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from where group by having order by limit 2 执行顺序 from ...

  4. 关于SWITCH中CASE的执行顺序。

    关于SWITCH中CASE的执行顺序其实是一个挺有意思的小问题,带不带break,或者break放置在哪里都会对最终结果产生影响,其实判断最终结果只要找到入口点和最近的一个break就行,然后入口点和 ...

  5. hmi中的宏指令是c语言,HMI中的宏指令编程中的语句执行顺序是?

    HMI中的宏指令编程中的语句执行顺序是? 以威纶通里的例子为例: 4. if结构语句 macro_command main() int k[10], j for j = 0 to 10 k[j] =  ...

  6. mysql数据库查询关键字级别_MySQL数据库之单表查询中关键字的执行顺序

    MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from where group by having order by limit 2 执行顺序 from ...

  7. 整理:sql server 中sql语句执行顺序

    原文地址为: 整理:sql server 中sql语句执行顺序 SQL Server 查询处理中的各个阶段(SQL执行顺序) SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中 ...

  8. SQL Server 中SQL语句执行顺序

    SQL Server 中SQL语句执行顺序 我们需要对SQL语句的执行顺序了若指掌,才能更好的理解SQL. SQL 不同于与其他编程语言的最明显特征是处理代码的顺序. 在大数编程语言中,代码按编码顺序 ...

  9. 继承中的构造方法执行顺序

    继承中的构造方法执行顺序 在子父类中,创建子类对象,调用子类的构造方法, 在子类的构造方法的第一行代码如果没有调用父类的构造或者没有调用子类的其他构造,则默认调用父类无参构造. 为什么要调用父类构造? ...

最新文章

  1. tensorflow的mnist改写成pytorch
  2. 管理员修改文件的权限
  3. requests.get(url)执行没反应_翟至宇:执行路上,从未停歇
  4. LeetCode45 Jump Game II
  5. PAT甲级1056(queue的用法)
  6. Delphi 日期函数列表
  7. 天锐绿盾技术大讲堂:终端出现红色“+”
  8. python3爬虫用代理池爬虫搜狗微信文章
  9. 利用LR做性能测试中出现的常见问题解决方案
  10. C++ “电子宠物游戏”
  11. android 裁剪图片工具,十大最佳Android图像裁剪(裁剪小部件)库
  12. 我的世界服务器淬炼系统,我的世界淬炼指令 | 手游网游页游攻略大全
  13. 弄清USART串口的使能位(UE、TCIE、RXNEIE)和标志位(TC、RXNE)
  14. 【mathematica画三维空间坐标系箭头】
  15. 货郎担问题(分支限界法)
  16. elementui实现上传视频功能+预览
  17. Python 打地鼠小游戏
  18. matlab 旋转曲面,在matlab中实现旋转曲面的动画设计
  19. 中小团队如何快速制定推送运营体系
  20. rpa 手机_RPA

热门文章

  1. 9、mybatis中动态sql的使用
  2. Spark入门(八)之WordCount
  3. 作为一名Java程序员,你竟然不知道Instrumentation
  4. Java中的内存泄露的几种可能
  5. 如何合理的规划一次 JVM 性能调优
  6. Java中的注解是如何工作的
  7. SpringCloud配置中心内容加密
  8. 如何解决vuepress部署出现样式问题
  9. java三大框架实现任务调度——IRemindService
  10. 数组(ArrayList)底层怎样扩容