2.7、条件测试

JUnit JupiterExecutionCondition扩展API机制允许开发者们使用条件编码得方式来启动或者禁用一个容器或测试类。一个简单条件测试就是支持@DisableDisabledConditionJUnit Jupiterorg.junit.jupiter.api.condition包下提供了除了@Disabled之外得其他注解,这些注解允许开发者们以声明得方式启动或关闭容器和测试。详情参见下面得章节。

请注意,以下部分中列出的任何条件注释也可以用作元注释,以便创建自定义组合注释。比如: @EnabledOnOs demo 例子中得@TestOnMac是由@Test@EnabledOnOs组合而成得。

下面所有列出的注解只能在测试接口、测试类、测试方法上定义一次。如果一个条件注释在一个给定的元素上直接、间接或元出现多次,则只使用JUnit发现的第一个这样的注释;任何附加的声明都将被忽略。然而,请注意每个条件注解都可以与org.junit.jupiter.api.condition包下其他条件注解结合使用。

2.7.1、判断操作系统

可以通过@EnabledOnOs@DisabledOnOs注解让容器和测试在特定得操作系统启动或者禁用。

@Test
@EnabledOnOs(MAC)
void onlyOnMacOs() {
    // ...
}

@TestOnMac
void testOnMac() {
    // ...
}

@Test
@EnabledOnOs({ LINUX, MAC })
void onLinuxOrMac() {
    // ...
}

@Test
@DisabledOnOs(WINDOWS)
void notOnWindows() {
    // ...
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Test
@EnabledOnOs(MAC)
@interface TestOnMac {
}

2.7.2、判断Java运行环境

可以通过@EnabledOnJre@DisabledOnJre让容器或者测试在特定JRE得版本启用或者禁用。

@Test
@EnabledOnJre(JAVA_8)
void onlyOnJava8() {
    // ...
}

@Test
@EnabledOnJre({ JAVA_9, JAVA_10 })
void onJava9Or10() {
    // ...
}

@Test
@DisabledOnJre(JAVA_9)
void notOnJava9() {
    // ...
}

2.7.3、判断系统属性

通过@EnabledIfSystemProperty@DisabledIfSystemProperty注解根据指定的JVM系统属性的值启用或禁用容器或测试。其值通过matches属性所提供的值,将作为正则表达式。

@Test
@EnabledIfSystemProperty(named = "os.arch", matches = ".*64.*")
void onlyOn64BitArchitectures() {
    // ...
}

@Test
@DisabledIfSystemProperty(named = "ci-server", matches = "true")
void notOnCiServer() {
    // ...
}

2.7.4、判断环境变量

通过@EnabledIfEnvironmentVariable@DisabledIfEnvironmentVariable注解得named属性提供得值作为环境变量来启动或者禁用容器或测试。其环境属性得值通过matches属性提供,且支持正则表达式。

@Test
@EnabledIfEnvironmentVariable(named = "ENV", matches = "staging-server")
void onlyOnStagingServer() {
    // ...
}

@Test
@DisabledIfEnvironmentVariable(named = "ENV", matches = ".*development.*")
void notOnDeveloperWorkstation() {
    // ...
}

2.7.5、根据脚本判断

在未来得JUnit Jupiter发行版,@EnabledIf@DisabledIf将会被废弃移除。

JUnit Jupiter通过@EnabledIfDisabledIf注解中的执行脚本来启动或者禁止一个容器或者测试。其

脚本可以用JavaScriptGroovy或任何其他支持Java脚本API(由JSR 223定义)的脚本语言编写。

如果你想写关注于指定操作系统、JRE版本、JVM系统变量和特定得环境变量得脚本,你应该使用专注于这个目的得注解。详细信息可以从之前得章节可以看到。

如果您发现您在多次使用相同脚本,您应该考虑写一个专注条件执行扩展插件,这样可以更块、类型更安全、更容易维护。

@Test // Static JavaScript expression.
@EnabledIf("2 * 3 == 6")
void willBeExecuted() {
    // ...
}

@RepeatedTest(10) // Dynamic JavaScript expression.
@DisabledIf("Math.random() < 0.314159")
void mightNotBeExecuted() {
    // ...
}

@Test // Regular expression testing bound system property.
@DisabledIf("/32/.test(systemProperty.get('os.arch'))")
void disabledOn32BitArchitectures() {
    assertFalse(System.getProperty("os.arch").contains("32"));
}

@Test
@EnabledIf("'CI' == systemEnvironment.get('ENV')")
void onlyOnCiServer() {
    assertTrue("CI".equals(System.getenv("ENV")));
}

@Test // Multi-line script, custom engine name and custom reason.
@EnabledIf(value = {
                "load('nashorn:mozilla_compat.js')",
                "importPackage(java.time)",
                "",
                "var today = LocalDate.now()",
                "var tomorrow = today.plusDays(1)",
                "tomorrow.isAfter(today)"
            },
            engine = "nashorn",
            reason = "Self-fulfilling: {result}")
void theDayAfterTomorrow() {
    LocalDate today = LocalDate.now();
    LocalDate tomorrow = today.plusDays(1);
    assertTrue(tomorrow.isAfter(today));
}
脚本绑定

以下名称绑定到每个脚本上下文,因此可以在脚本中使用。访问器通过简单的String get(String name)方法提供对类似于映射的结构的访问。

名称 类型 描述
systemEnvironment accessor 操作系统环境变量访问器
systemProperty accessor JVM系统属性访问器
junitConfigurationParameter accessor 配置参数访问器
junitDisplayName String 显示测试或者容器得名称
junitTags Set 所有标志测试或者容器得tag
junitUniqueId String 测试或容器得唯一ID

results matching ""

    No results matching ""