猿问

JUnit 5 @Tag 不能按预期与 @BeforeEach/@AfterEach 一起工作

有一个使用 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 */ }

由于预期的行为不起作用,我什至强制 with <excludedGroups>,从空值更改为<excludedGroups>minus</excludedGroups>on pom.xml,仍然不起作用。


pom.xml我失踪了,有什么问题吗?


@Tag和@BeforeEachplus之间有冲突@AfterEach吗?


MYYA
浏览 110回答 2
2回答

哔哔one

@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() {            // ...        }    }}

四季花海

我认为 @Tag 注释只是为了按照共同特征对测试进行分类。如果您需要不同的setUp()和teardown(),我想正确的方法是将它们分开在不同的测试类中,而不是使用标签注释。
随时随地看视频慕课网APP

相关分类

Java
我要回答