首页 > 解决方案 > JUnit 5 中是否有任何 API 来测试包含或排除的标签?

问题描述

如果某个标签被“包含”,我想启用测试,即通过--include-tagConsoleLauncher 或useJUnitPlatform.includeTagsGradle 中的属性的选项。是否有任何 API 可以在测试类或方法的上下文中检索此选项的值?

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

@EnabledIf("'true' == systemProperty.get('itest.backendSystemPresent') || junitTags.contains('BackendSystemIT') == true")

junitTags包含相关元素的 @Tag 注释,而不是运行时包含的标签。

标签: junit5

解决方案


再次阅读您的问题,我的回答是“否”。你不能用它junitTags来实现你的目标。不,目前没有这样的 API。你需要类似的东西:

@EnabledIf("'true' == evaluateTagExpression('BackendSystemIT') || ...)

因为您还需要在这里处理标签表达式:https ://junit.org/junit5/docs/current/user-guide/#running-tests-tag-expressions

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

顺便提一句。我们很快就会使用any()和标记改进标记表达语言。https://github.com/junit-team/junit5/issues/1679none()

可能的解决方案

  1. 用注释你的测试@Tag("BackendSystemIT")
  2. 在运行测试之前,检查itest.backendSystemPresent系统属性,如果已设置,则将 a 传递--include-tag "BackendSystemIT"给测试运行。
  3. 让 Jupiter 完成评估标签表达式的工作

推荐阅读