JUnit5学习之四:按条件执行

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

关于《JUnit5学习》系列

《JUnit5学习》系列旨在通过实战提升SpringBoot环境下的单元测试技能,一共八篇文章,链接如下:

基本操作

Assumptions类

Assertions类

条件执行

标签(Tag)和自定义注解

参数化测试(Parameterized Tests)基础

参数化测试(Parameterized Tests)进阶

综合进阶(终篇)

本篇概览

本文是《JUnit5学习》系列的第四篇,有时咱们希望测试方法仅在一定条件下才执行,例如有的测试方法只适合Linux环境,这就是按条件执行的需求,本篇的主要内容就是学习如何为测试方法设置前提条件,只有满足了这些条件测试才会被执行,本篇大纲如下:

自定义测试方法的执行顺序

按操作系统设置条件

按JAVA环境设置条件

按系统属性设置条件

按环境变量设置条件

自定义条件

源码下载

如果您不想编码,可以在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是父子结构的工程,本篇的代码在conditional子工程中,如下图:

在这里插入图片描述

自定义测试方法的执行顺序

今天要写的测试方法很多,为了管理好这些方法,在学习按条件执行之前先来看看如何控制测试方法的执行顺序:

给测试类添加注解TestMethodOrder,注解的value是OrderAnnotation.class

给每个测试方法添加Order注解,value值是数字,越小的value越优先执行

使用方法如下图所示:

在这里插入图片描述

接下来的实战中,咱们就用上述方法控制测试方法的执行顺序;

按操作系统设置条件

注解EnabledOnOs指定多个操作系统,只有当前操作系统是其中的一个,测试方法才会执行;

注解DisabledOnOs指定多个操作系统,只要当前操作系统是其中的一个,测试方法就不会执行;

测试代码如下:

@Test @Order(1) @EnabledOnOs(OS.WINDOWS) @DisplayName("操作系统:只有windows才会执行") void onlyWindowsTest() { assertEquals(2, Math.addExact(1, 1)); } @Test @Order(2) @EnabledOnOs({OS.WINDOWS, OS.LINUX}) @DisplayName("操作系统:windows和linux都会执行") void windowsORLinuxTest() { assertEquals(2, Math.addExact(1, 1)); } @Test @Order(3) @DisabledOnOs({OS.MAC}) @DisplayName("操作系统:只有MAC才不会执行") void withoutMacTest() { assertEquals(2, Math.addExact(1, 1)); }

我这里是windows操作系统,上述三个方法执行结果如下:

在这里插入图片描述

按JAVA环境设置条件

注解EnabledOnJre指定多个JRE版本,只有当前JRE是其中的一个,测试方法才会执行;

注解DisabledOnJre指定多个JRE版本,只要当前JRE是其中的一个,测试方法就不会执行;

注解EnabledForJreRange指定JRE版本的范围,只有当前JRE在此范围内,测试方法才会执行;

注解DisabledForJreRange指定JRE版本的范围,只要当前JRE在此范围内,测试方法就不会执行;

测试代码如下:

@Test @Order(4) @EnabledOnJre({JRE.JAVA_9, JRE.JAVA_11}) @DisplayName("Java环境:只有JAVA9和11版本才会执行") void onlyJava9And11Test() { assertEquals(2, Math.addExact(1, 1)); } @Test @Order(5) @DisabledOnJre({JRE.JAVA_9}) @DisplayName("Java环境:JAVA9不执行") void withoutJava9Test() { assertEquals(2, Math.addExact(1, 1)); } @Test @Order(6) @EnabledForJreRange(min=JRE.JAVA_8, max=JRE.JAVA_11) @DisplayName("Java环境:从JAVA8到1之间的版本都会执行") void fromJava8To11Test() { assertEquals(2, Math.addExact(1, 1)); }

我这里是JDK8,执行结果如下:

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

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