为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MYYA 2023-10-13 16:31:18
有一个使用 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")@BeforeEachvoid beforeEach(TestInfo test) { /* code */ }@Tag("minus")@AfterEachvoid afterEach(TestInfo test) { /* code */ }由于预期的行为不起作用,我什至强制 with <excludedGroups>,从空值更改为<excludedGroups>minus</excludedGroups>on pom.xml,仍然不起作用。pom.xml我失踪了,有什么问题吗?@Tag和@BeforeEachplus之间有冲突@AfterEach吗?
查看完整描述

2 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

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

            // ...

        }


    }

}


查看完整回答
反对 回复 2023-10-13
?
四季花海

TA贡献1811条经验 获得超5个赞

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

查看完整回答
反对 回复 2023-10-13
  • 2 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信