java JUnit 5@Tag在@beforeach/@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 */ }
由于预期的行为不起作用,我甚至强制使用<excludedGroups>
,从空值更改为<excludedGroups>minus</excludedGroups>
on pom.xml
,仍然不起作用
我在pom.xml
上遗漏了什么
{
# 1 楼答案
@Tag用于测试类和方法。这与上述测试的设置/拆卸无关
您可以将这些测试拆分为单独的测试类,也可以利用Nested Test。嵌套测试可能看起来像这样:
# 2 楼答案
我认为@Tag注释的构思只是为了根据一个共同的特征对测试进行分类。如果您需要不同的setUp()和teardown(),我想正确的方法是在不同的测试类中分离它们,而不是使用标记注释
文档中描述了它可以用于测试类或测试方法:
https://junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Tag.html