JUnit 5 @Tag не работает должным образом с @ BeforeEach / @ AfterEach - PullRequest
0 голосов
/ 11 октября 2019

У меня есть простой набор тестов по математическим операциям, разработанный с использованием JUnit 5. Я использую два тега @Tag("add") и @Tag("minus").

С плагином maven и surefire я выбираю тег для тестов.

<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>3.0.0-M3</version>
  <configuration combine.children="append">
    <excludedGroups></excludedGroups>
    <groups>add</groups>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>5.5.2</version>
    </dependency>
  </dependencies>
</plugin>

Когда я выполняю mvn test на терминале, он будет выполнять только тесты, отмеченные @Tag("add"), но по какой-то причине будут выполнять @BeforeEach и @AfterEach, помеченные исключительно @Tag("minus")

@Tag("minus")
@BeforeEach
void beforeEach(TestInfo test) { /* code */ }

@Tag("minus")
@AfterEach
void afterEach(TestInfo test) { /* code */ }

Так как ожидаемое поведение не работало, я даже принудительно нажал <excludedGroups>, изменил с пустого значения на <excludedGroups>minus</excludedGroups> на pom.xml, все еще не работал.

Там что-то не такpom.xml что мне не хватает?

Конфликт между @Tag и @BeforeEach плюс @AfterEach?

Ответы [ 2 ]

3 голосов
/ 11 октября 2019

@ Tag предназначен для тестовых классов и методов. Это не имеет ничего общего с настройкой / разбором указанных тестов.

Вы можете разделить эти тесты на отдельные классы или использовать Nested Test . Вложенные тесты могут выглядеть примерно так:

@DisplayName("A stack")
class MathTest {

    @Nested
    @DisplayName("when new")
    @Tag("add")
    class Add {

        @BeforeEach
        void setupAdding() {
            // ...
        }

        @Test
        @DisplayName("can add")
        void canAdd() {
            // ...
        }

    }

    @Nested
    @DisplayName("minus")
    @Tag("minus")
    class Minus {

        @BeforeEach
        void setupMinus() {
            // ...
        }

        @Test
        @DisplayName("can subtract")
        void testMinus() {
            // ...
        }

    }
}
2 голосов
/ 11 октября 2019

Я думаю, что аннотация @Tag была задумана просто для того, чтобы классифицировать ваши тесты в соответствии с общей характеристикой. Если вам нужны разные setUp () и teardown (), я думаю, правильный путь - разделить их по разным классам тестов, а не с пометкой тега.

В описываемой документации его можно использовать вкласс теста или метод теста:

https://junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Tag.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...