junit 测试执行顺序

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

默认情况下,在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

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

 MethodLengthOrderer class 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 测试执行顺序

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

  1. junit 验证日志输出_JUnit规则–引发异常时执行附加验证

    junit 验证日志输出 在本文中,我将快速向您展示如果您需要解决以下挑战,那么JUnit规则有多方便 一个方法可以捕获异常,并且必须在抛出或引发包装异常之前执行一些额外的任务. 调用额外任务和引发的 ...

  2. 测试人员如何在项目中开展测试

    项目中角色分为:项目经理(PM).QA.产品.UI.开发.测试,本文以测试人员视角展开谈谈如何开展测试. 目录 一.尽早介入测试 二.积极与产品人员核对需求 三.提前准备测试用例 四.交叉执行用例 五 ...

  3. 方言听力测试软件,汉语普通话噪声中听力测试材料在不同方言正常人中的应用研究...

    摘要: 目的 研究汉语普通话噪声中听力测试(hearing in noise test,HINT)句子测试材料在不同方言听力正常人中的测试效果.方法 使用BLIMP测试软件对不同方言地区和北京市正常听 ...

  4. php 扩展加载顺序,关于PHP中extension加载顺序问题的解决方法

    有的php扩展,加载是有先后顺序的,如果搞错了,会导致扩展无法加载. 1.pdo_sqlsrv是sqlserver扩展,如果在pdo扩展之前加载就会报以下错误:PHP Warning: PHP Sta ...

  5. python 执行sql语句_python中脚本怎么执行sql语句?

    python连接mysql并执行SQL语句的方法步骤: 1.创建与数据库连接对象 2.建立游标对象 3.利用游标对象 执行SQL语句命令 4.#提交到数据库 5.关闭游标对象 6.关闭数据库连接 7. ...

  6. 敏捷开发过程中的测试

    Choerodon的测试管理主要为用户提供敏捷化的持续测试工具,包括测试用例管理.测试计划.测试分析等,可以有效地提高软件测试的效率和质量,提高测试的灵活性和可视化水平,最终减少测试时间,让用户将主要 ...

  7. Java中对象的实例化顺序

    文章目录 1 Java中对象的实例化顺序 1 Java中对象的实例化顺序 继承后的初始化顺序: 静态成员包括静态构造代码块,初始化顺序跟书写顺序有关.

  8. 【第四篇:解决校招面试中的测试设计题目】

    又到周六了,大家周末快乐! 如果你坚持看到了这边,那么接下来我们就可以聊聊软件测试工作中的基本功了.在应聘测试工程师或者测试开发工程师的过程中,测试设计题目的考察是必不可少的环节,本章会从常见的软件测 ...

  9. 最全APP测试思想及流程要点,高薪测试人员一定要看

    App已经渗透到每个人的生活.娱乐.学习.工作当中,APP作为现如今几乎最广泛的应用程序,在所有的移动平台上都有应用,并且以极高的速度增长.但是作为程序而言,出现的时间并不是非常久.很多原有的软件测试 ...

最新文章

  1. 终于决定要写写东西了
  2. element表格多列排序_Excel表格在工作中的经典用法,建议收藏!
  3. FFmpegInterop 库在 Windows 10 应用中的编译使用
  4. php读取屏幕大小,jQuery 获取屏幕尺寸
  5. iOS之深入解析dyld与ObjC关联的底层原理
  6. CSP2020洛谷P7077:函数调用
  7. 苹果机的时间格式转换为时间搓
  8. 升级华为鸿蒙os2.0名单,鸿蒙OS 2.0正式版升级名单确认!这10款机型用户先恭喜了...
  9. SWFupload在IE9以上中的bug
  10. 【NLP】Dive into BERT:语言模型与知识
  11. 嵌入式就业去哪?中国10大军工央企,1000+单位!史上最全!
  12. springboot基于java的校园二手书籍交易平台毕业设计源码131558
  13. region proposal
  14. 华硕笔记本提示android,华硕主板电脑和华硕笔记本开启VT进BIOS设置方法教程
  15. [情侣空间] 基于spring boot的自制情侣空间
  16. 李开复建议:想创业的青年先去小公司磨练
  17. 怎么压缩pdf文件大小并保持清晰度?
  18. linux c语言 打开文件,linux c打开文件的方法
  19. 价值 20 万美元的爱马仕包包是用蘑菇做的,你还会买吗?
  20. 年报发布后股价三连涨,神州租车何以成为 “方舱号”?

热门文章

  1. P2742 [USACO5.1]圈奶牛Fencing the Cows /【模板】二维凸包
  2. [ZJOI2007] 棋盘制作(单调栈 / DP悬线法)
  3. 51nod1355-斐波那契的最小公倍数【min-max容斥】
  4. 【二分】防具布置/秦腾与教学评估(ybtoj 二分-1-2/jzoj 1253/luogu 4403)
  5. 线段树-Pudding Monster CF526F-单调栈
  6. Java中的事务——全局事务与本地事务
  7. Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
  8. MySQL isnull()函数基本指南
  9. JVM内存管理------垃圾搜集器参数精解
  10. C++描述杭电OJ 2016.数据的交换输出 ||