前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Junit5系列-Junit5中DisabledCondition条件测试执行

Junit5系列-Junit5中DisabledCondition条件测试执行

作者头像
洋仔聊编程
发布2019-01-15 16:28:12
1.5K0
发布2019-01-15 16:28:12
举报
文章被收录于专栏:Java开发必知必会

目录

代码语言:txt
复制
- 简介
- 规定操作系统条件
- 规定Java 运行环境条件
- 规定系统属性条件
- 规定环境变量条件
- 规定脚本依赖条件

Junit5中提供了许多可以基于操作系统、系统变量、环境变量甚至可以基于脚本去进行启动或禁止测试方法的执行,但是不怎么常用,就直接翻译官网上的文章吧。

简介

JUnit Jupiter中的ExecutionCondition扩展API允许开发人员以编程方式启用或禁用容器或测试。 这种情况最简单的例子是内置的DisabledCondition,它支持 @Disabled注释,也就是@Disabled注解介绍博文

除了@Disabled之外,JUnit Jupiter还支持 org.junit.jupiter.api.condition类中的其他几个注解去允许开发人员以注解声明的方式启用或禁用容器和测试的条件包。

下面介绍的所有注解也可以作为元注解使用,以便用来创建自定义注解。

例如,演示中的@TestOnMac注解就是将@Test和@EnabledOnOs结合在一个单独的、可重用的注解中。

规定操作系统条件

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

下面为demo,其中的每个断言方法的作用,根据注解名几乎就可以知道了:

代码语言:javascript
复制
@Test
@EnabledOnOs(MAC)
void onlyOnMacOs() {
    // ...
}

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

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

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

正如上述所说,其中@TestOnMac这个注解,就是根据已经有的注解作为元注解,组合而成的新注解,其源码为:

代码语言:javascript
复制
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledOnOs;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import static org.junit.jupiter.api.condition.OS.MAC;

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

规定Java 运行环境条件

可以通过@EnabledOnJre和@DisabledOnJre注解在特定版本的Java运行时环境(JRE)上启用或禁用容器或测试。

代码语言:javascript
复制
@Test
@EnabledOnJre(JAVA_8)
void onlyOnJava8() {
    // ...
}

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

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

规定系统属性条件

通过 @EnabledIfSystemProperty 和 @DisabledIfSystemProperty 注解,

可以根据命名的JVM系统属性的值启用或禁用容器或测试。

其中通过matches属性提供的值将被解释为正则表达式。

代码语言:javascript
复制
@Test
@EnabledIfSystemProperty(named = "os.arch", matches = ".*64.*")
void onlyOn64BitArchitectures() {
    // ...
}

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

规定环境变量条件

可以根据底层操作系统中命名的环境变量的值通过 @EnabledIfEnvironmentVariable和 @DisabledIfEnvironmentVariable 注解来启用或禁用容器或测试。

其中通过matches属性提供的值将被解释为正则表达式。

代码语言:javascript
复制
@Test
@EnabledIfEnvironmentVariable(named = "ENV", matches = "staging-server")
void onlyOnStagingServer() {
    // ...
}

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

规定脚本依赖条件

JUnit Jupiter提供了根据对通过 @EnabledIf 或 @DisabledIf 注释配置的脚本的评估来启用或禁用容器或测试的能力。脚本可以用JavaScript、Groovy或任何其他脚本语言编写,这些脚本语言都支持 JSR 223 定义的Java Scripting API。

注意:这两个注解目前都属于实验性功能,请谨慎使用。

如果脚本的逻辑仅依赖于当前的操作系统、当前的Java运行时环境版本、特定的JVM系统属性或特定的环境变量,则应该考虑使用专门用于此目的的内置注释之一。

代码语言:javascript
复制
@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) 方法提供对类似地图的结构的访问。

序号

名称

类型

描述

1

systemEnvironment

accessor

操作系统环境变量访问器

2

systemProperty

accessor

JVM系统属性访问器

3

junitConfigurationParameter

accessor

配置参数取值

4

junitDisplayName

String

测试或者容器的展示名称

5

junitTags

Set

测试或者容器的所有标签信息

6

junitUniqueId

String

测试或者容器的唯一标识

如果转载此博文,请附上本文链接,谢谢合作~ :https://blog.csdn.net/csdn___lyy 如果感觉这篇文章对您有所帮助,请点击一下“喜欢”或者“关注”博主,您的喜欢和关注将是我前进的最大动力!

refer: 官网

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年01月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 简介
  • 规定操作系统条件
  • 规定Java 运行环境条件
  • 规定系统属性条件
  • 规定环境变量条件
  • 规定脚本依赖条件
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档