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

Use enum values as a Tag in JUnit 5

我喜欢新的@Tag feature in JUnit 5 as shown in the manual

我有一个顾虑。标签值只是字符串。这意味着可能会出现错别字。

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

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

元注释

使用Java annotations rather than Java enums.

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

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

manual on Meta-Annotations. And see this slide in a YouTube video of a talk by Marc Philipp

例子

声明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() { … }