Spring Boot 可以控制测试在一定条件下执行,同@Tag 按标签过滤不同。
一、Java 环境
@EnabledOnJre :指定多个 JRE 版本,只有当前测试环境 JRE 版本在此范围内才执行测试。@DisabledOnJre :指定多个 JRE 版本,只有当前测试环境 JRE 版本不在此范围内才执行测试。@EnabledForJreRange :指定一个 JRE 版本范围,只有当前测试环境 JRE 版本在此范围内才执行测试。@DisabledForJreRange :指定一个 JRE 版本范围,只有当前测试环境 JRE 版本不在此范围内才执行测试。
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledForJreRange;
import org.junit.jupiter.api.condition.DisabledOnJre;
import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.EnabledOnJre;
import org.junit.jupiter.api.condition.JRE;
public class UnitTest {
@Test
@EnabledOnJre({ JRE.JAVA_11, JRE.JAVA_17 })
public void enabledOnJava11And17Test() {
System.out.println("Method[enabledOnJava11And17Test] executed.");
}
@Test
@DisabledOnJre({ JRE.JAVA_17 })
public void disabledOnJava17Test() {
System.out.println("Method[disabledOnJava17Test] executed.");
}
@Test
@EnabledForJreRange(min = JRE.JAVA_8, max = JRE.JAVA_17)
public void enabledForJava8To17() {
System.out.println("Method[enabledForJava8To17] executed.");
}
@Test
@DisabledForJreRange(min = JRE.JAVA_11, max = JRE.JAVA_17)
public void disabledForJava11To17() {
System.out.println("Method[disabledForJava11To17] executed.");
}
}
复制代码
二、操作系统
EnabledOnOs :当前系统为指定操作系统时执行测试。DisabledOnOs :当前系统为指定操作系统时不执行测试。
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledOnOs;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;
public class UnitTest {
@Test
@EnabledOnOs(OS.WINDOWS)
public void enabledOnWindows() {
System.out.println("Windows操作系统下执行");
}
@Test
@DisabledOnOs(OS.LINUX)
public void disabledOnLinux() {
System.out.println("Linux操作系统下不执行");
}
}
复制代码
三、系统属性
@EnabledIfSystemProperty :当前系统匹配指定的系统属性名称和期望值时执行测试。@DisabledIfSystemProperty :当前系统匹配制定的系统属性名称和期望值时不执行测试。
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
public class UnitTest {
@Test
@EnabledIfSystemProperty(named = "user.language", matches = "zh")
public void enabledIfSystemPropertyUserLanguageIsZh() {
System.out.println("当前操作系统用户语言是中文");
}
@Test
@DisabledIfSystemProperty(named = "os.arch", matches = ".*64.*")
public void disabledIfSystemProperty() {
System.out.println("64位操作系统不执行");
}
}
复制代码
四、环境变量
EnabledIfEnvironmentVariable :当前系统匹配指定的环境变量名称和期望值时执行测试。DisabledIfEnvironmentVariable :当前系统匹配制定的环境变量名称和期望值时不执行测试。
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
public class UnitTest {
@Test
@EnabledIfEnvironmentVariable(named = "JAVA_HOME", matches = ".*")
public void enabledIfEnvironmentVariable() {
System.out.println("环境变量JAVA_HOME存在时执行");
}
@Test
@DisabledIfEnvironmentVariable(named = "JAVA_HOME", matches = ".*17.*")
public void disabledIfEnvironmentVariable() {
System.out.println("环境变量JAVA_HOME存在字符17时不执行");
}
}
复制代码
五、自定义条件
JUnit 5.7 以后的版本提供了@EnabledIf 和@DisabledIf 两个注解实现用户自定义测试执行条件。@EnabledIf 和@DisabledIf 注解接收一个方法名作为参数,方法返回值类型为boolean 。
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledIf;
import org.junit.jupiter.api.condition.EnabledIf;
public class UnitTest {
@Test
@EnabledIf("customCondition")
public void enabledIf() {
System.out.println("Method[enabledIf] executed.");
}
@Test
@DisabledIf("customCondition")
public void disabledIf() {
System.out.println("Method[disabledIf] executed.");
}
private boolean customCondition() {
return true;
}
}
复制代码
EnabledIf 和@DisabledIf 注解不仅可以用在方法上,还可以用在类上,如果用在类上,则@EnabledIf 和@DisabledIf 注解参数指定的方法必须是静态方法。
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIf;
@EnabledIf("customCondition")
public class UnitTest {
@Test
public void enabledIf() {
System.out.println("Method[enabledIf] executed.");
}
private static boolean customCondition() {
return true;
}
}
复制代码
如果@EnabledIf 和@DisabledIf 注解参数指定的方法与测试方法不在同一个类中,则必须指定方法全路径:包名.类名#方法名 。
package com.example.demo;
public class CustomCondition {
public static boolean customCondition() {
return true;
}
}
复制代码
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIf;
@EnabledIf("com.example.demo.CustomCondition#customCondition")
public class UnitTest {
@Test
public void enabledIf() {
System.out.println("Method[enabledIf] executed.");
}
}
|