Как объединить аннотации JUnit в пользовательскую аннотацию? - PullRequest
0 голосов
/ 20 февраля 2020

(с использованием OpenJDK-13 и JUnit5-Jupiter)

Проблема в том, что каждый из моих модульных тестов использует немалую систему аннотаций JUnit, что-то вроде этого:

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

Это делает создание тестов немного утомительным, тестовый код немного длинным и, конечно, когда требуется изменение, это рутина!

Интересно, смогу ли я создать свою собственную аннотацию JUnit: @CcrStandardTest, которая будет означать все вышеупомянутые аннотации?

Я также пытался сдвинуть аннотации вверх в определении класса (надеясь, что они затем будут применяться ко всем методам класса), но компилятор говорит нет: "@ParameterizedTest не является применимо к типу "

1 Ответ

3 голосов
/ 20 февраля 2020

Вы можете сделать составную аннотацию :

JUnit Юпитерские аннотации могут использоваться как метааннотации . Это означает, что вы можете определить собственную составную аннотацию , которая будет автоматически наследовать семантику ее метааннотаций.

Например:

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
}
...