如何将JUnit注释组合成自定义注释



(使用OpenJDK-13和JUnit5 Jupiter(

问题是,我的单元测试每个都使用了一个不小的JUnit注释系统,类似于这样:

@ParameterizedTest
@MethodSource("myorg.ccrtest.testlogic.DataProviders#standardDataProvider")
@Tags({@Tag("ccr"), @Tag("standard")})

这使得测试编写有点乏味,测试代码有点长,当然,当需要更改时,这是一件烦人的事情!

我想知道我是否可以创建自己的JUnit注释:@CcrStandardTest,这意味着上面的所有注释?

我还尝试在类定义中上移注释(希望它们能应用于类的所有方法(,但编译器拒绝了:"@ParameterizedTest不适用于类型">

您可以进行合成注释:

JUnit Jupiter注释可以用作元注释。这意味着您可以定义自己的组合注释,该注释将自动继承其元注释的语义

例如:

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
@ParameterizedTest
@MethodSource("myorg.ccrtest.testlogic.DataProviders#standardDataProvider")
@Tag("ccr")
@Tag("standard")
public @interface CcrStandardTest {}

然后,您可以将合成的注释放在您的测试方法上:

@CcrStandardTest
void testFoo(/* necessary parameters */) {
// perform test
}

最新更新