(使用OpenJDK-13和JUnit5-Jupiter)
问题是我的单元测试每个都使用一个不小的JUnit批注系统,如下所示:
@ParameterizedTest
@MethodSource("myorg.ccrtest.testlogic.DataProviders#standardDataProvider")
@Tags({@Tag("ccr"), @Tag("standard")})
这使得测试编写有些繁琐,测试代码有点长,当然,当需要更改时,这很麻烦!
想知道是否可以创建自己的JUnit批注:
@CcrStandardTest
,这意味着上面的所有批注吗?我还尝试过在类定义中向上移动注释(希望它们随后将应用于类的所有方法),但是编译器拒绝:“ @ ParameterizedTest不适用于类型”
最佳答案
您可以创建composed annotation:
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
}