欢迎访问我的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,执行结果如下: