拥有一个使用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
之间的冲突?
答案 0 :(得分:3)
@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() {
// ...
}
}
}
答案 1 :(得分:2)
我认为@Tag注释只是为了遵循一个共同特征来简化测试。如果您需要不同的setUp()和teardown(),我想最好的方法是将它们分开在不同的测试类中,而不是使用标签注释。
在文档中描述了它可以在测试类或测试方法中使用:
https://junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Tag.html