Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JUnit5中是否有任何API可以测试包含或排除的标记?_Junit5 - Fatal编程技术网

JUnit5中是否有任何API可以测试包含或排除的标记?

JUnit5中是否有任何API可以测试包含或排除的标记?,junit5,Junit5,如果某个标记是“包含”的,我想启用一个测试,即通过ConsoleLauncher的选项--include tag,或Gradle中的useJUnitPlatform.includeTags属性。在测试类或方法的上下文中是否有检索此选项值的API 我尝试了基于脚本的条件@EnabledIf,如下所示: @EnabledIf("'true' == systemProperty.get('itest.backendSystemPresent') || junitTags.contains('Backe

如果某个标记是“包含”的,我想启用一个测试,即通过ConsoleLauncher的选项
--include tag
,或Gradle中的
useJUnitPlatform.includeTags
属性。在测试类或方法的上下文中是否有检索此选项值的API

我尝试了基于脚本的条件@EnabledIf,如下所示:

@EnabledIf("'true' == systemProperty.get('itest.backendSystemPresent') || junitTags.contains('BackendSystemIT') == true")
但是
junitTags
包含相关元素的@Tag注释,而不是运行时包含的标记

是否有任何API来检索在测试类或方法上下文中直接附加或继承的所有标记的值(此选项的值)

对。在测试方法中声明并使用
org.junit.jupiter.api.TestInfo
参数

@Test
@DisplayName("TEST 1")
@Tag("my-tag")
void test1(TestInfo testInfo) {
    assertEquals("TEST 1", testInfo.getDisplayName());
    assertTrue(testInfo.getTags().contains("my-tag"));
}
详情请参阅

但是junitTags包含所讨论元素的@Tag注释,而不是运行时包含的标记


这是预期的行为——平台(此处:console launcher)已经应用了通过
传递的过滤器——包括标记和其他配置参数。简而言之:在标准Jupiter测试中不需要手动检查标签。如果内置过滤有问题,请在此处创建问题:

再次阅读您的问题,我的回答是“否”。您不能使用
junitTags
来实现您的目标。不,目前还没有这样的API。您将需要以下内容:

@EnabledIf("'true' == evaluateTagExpression('BackendSystemIT') || ...)
因为您还需要注意这里的标记表达式:

但是,标签在过程的早期进行评估。当测试已被标记评估排除时,您的条件将没有机会执行。所以,我想,您必须坚持使用单系统属性开关来控制测试方法的启用状态

@Test
@DisplayName("TEST 1")
@Tag("my-tag")
void test1(TestInfo testInfo) {
    assertEquals("TEST 1", testInfo.getDisplayName());
    assertTrue(testInfo.getTags().contains("my-tag"));
}
顺便说一句,我们正在用
any()
none()
标记改进标记表达式语言

可能的解决方案

  • @Tag(“BackendSystemIT”)
  • 在运行测试之前,请检查
    itest.backendSystemPresent
    系统属性,如果设置了该属性,请将
    --include标记“BackendSystemIT”
    传递给测试运行
  • 让Jupiter来计算标记表达式