文
章
目
录
章
目
录
学会使用JUnit 5中内置的条件执行注解来启用或禁用特定测试的执行。
我们可以使用内置的条件注解来配置测试在何时运行和何时不运行,这些注解如下:
1.@EnabledOnOs和@DisabledOnOs
- 这些注解根据特定的操作系统启用或禁用已注解的测试。
- 支持的操作系统列在org.junit.jupiter.api.condition.OS枚举中,包括AIX、Linux、Mac、Solaris、Windows和其他。
- 当应用于类级别时,该类中的所有测试方法都将在相同的指定操作系统上启用。
- 如果通过此注解禁用了测试方法,则将启动测试类,但仅测试方法和其生命周期方法将不会被执行。
@Test
@EnabledOnOs(OS.MAC)
void testOnMacOs() {
assertTrue(true);
}
@Test
@DisabledOnOs(OS.WINDOWS)
void doNotTestOnWindows() {
assertTrue(true);
}
2.@EnabledOnJre和@DisabledOnJre
- 这些注解可以帮助为特定的JRE版本启用或禁用测试。
- 支持的值可以在最新版本的JRE枚举中找到。
- 如果无法检测到当前的JRE版本,则不考虑在JRE枚举中定义的任何常量。
@Test
@DisabledOnJre(JRE.JAVA_8)
void disabledOnJava8() {
assertTrue(true);
}
@Test
@EnabledOnJre({ JRE.JAVA_17, JRE.JAVA_18 })
void enabledOnJava17Or18() {
assertTrue(true);
}
3.@EabledForJreRange和@DisabledForJreRange
- 这些注解用于指示注解的测试类或测试方法仅针对使用其最小到最大属性的一定范围的JRE版本禁用或启用。
- 当应用于类级别时,该类中的所有测试方法都将在相同的指定JRE版本上启用。
@Test
@DisabledForJreRange(min = JRE.JAVA_8, max = JRE.JAVA_11)
void notFromJava8to11() {
assertTrue(true);
}
@Test
@EnabledForJreRange(min = JRE.JAVA_12, max = JRE.JAVA_18)
void fromJava12to18() {
assertTrue(true);
}
4.@EnabledIf和@DisabledIf
- 只有当提供条件评估为true时,已注解的测试类或测试方法才会被启用或禁用。
- 当应用于类级别时,该类中的所有测试方法都将根据相同条件启用或禁用
- 。当这些注解应用于类级别时,条件方法必须始终是静态的。
- 此注解不能重复,因此只能声明一次。
@Test
@EnabledIf("customConditionalFunction")
void enabled() {
assertTrue(true);
}
@Test
@DisabledIf("customConditionalFunction")
void disabled() {
assertTrue(true);
}
boolean customConditionalFunction() {
return true;
}
5.@EnabledIfEnvironmentVariable和@DisabledIfEnvironmentVariable
- 如果我们想要根据环境变量的值是否匹配特定正则表达式来启用或禁用测试,可以使用这些注解。
- 当在类级别声明时,结果将适用于该类中的所有测试方法。
- 如果指定的环境变量未定义,该注解的存在将没有任何影响。
- 这是一个可重复的注解,因此可以在测试方法或类上多次使用。
@Test
@EnabledIfEnvironmentVariable(named = "ENV", matches = ".*development.*")
public void executeOnlyInDevEnvironment() {
return true;
}
@Test
@DisabledIfEnvironmentVariable(named = "ENV", matches = ".*prod.*")
public void disabledOnProdEnvironment() {
return true;
}
6.@EnabledIfSystemProperty和@DisabledIfSystemProperty
- 如果我们想要根据特定JVM系统属性的值是否匹配特定正则表达式来启用或禁用测试,可以使用这些注解。
- 当在类级别声明时,结果将适用于该类中的所有测试方法。
- 如果指定的系统属性未定义,该注解的存在将没有任何影响。
- 这也是一个可重复的注解,因此可以在测试方法或类上多次使用。
@Test
@EnabledIfSystemProperty(named = "any.system.property", matches = "value-regex*")
public void onlyIfPropertyValueIsFound() {
return true;
}