junit - 在 JUnit 5 中使用枚举值作为标签

标签 junit enums tags junit5 junit-jupiter

我喜欢新的@Tag JUnit 5 中的功能为 shown in the manual

我有一个担忧。标签值只是字符串。这意味着可能会发生拼写错误。

➥ 是否有某种方法可以获取标签行为,但使用我定义的枚举中的值?

或者我可以依靠编译器强制执行有效值的其他方式?

最佳答案

元注释

使用Java annotations而不是Java enums .

您可以定义自己的注释来包装 JUnit @Tag 注释。因此,您只需编写一次标记值的字符串,然后在整个测试套件中应用该自定义注释。

编译器会检查元注释以确保有效值,正如您在问题中所要求的那样。

请参阅manual on Meta-Annotations 。并参见 this slide Marc Philipp 的 YouTube 演讲视频。

示例

声明your own annotation type .

@Target({ ElementType.TYPE , ElementType.METHOD })
@Retention( RetentionPolicy.RUNTIME )
@Tag( "fast" )
@Test
public @interface FastTest {}

稍后,当您编写测试时,使用新的 @FastTest 注释进行注释。

不要这样写:

@Tag( "fast" ) 
@Test
void someTest() { … }

...写下:

@FastTest
void someTest() { … }

关于junit - 在 JUnit 5 中使用枚举值作为标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54336977/

相关文章:

java - 需要使用mockito测试apache poi excel

java - 使用 JUnitPerf 测试问题

java - 多个 Maven 项目,单个 JaCoCo 站点?

java - 为什么 Java 枚举不可克隆?

mysql - 按不同分类法中的标签进行选择(AND + OR)

symfony - 使用编译器 channel 覆盖 symfony 服务标签

java - 如何在 JUnit 中测试这样的复杂方法?

python - 枚举器的默认值或无效值

mysql - 在 MYSQL 中按 "ENUM field"排序

javascript - 定义仅在运行 javascript 函数后附加的 URL 的最佳实践