我有一个Maven项目,使用JUnit 5和maven surefire插件2.22.2。
当我执行mvn clean install
或mvn test
时,我希望跳过一些特定的测试--它们要么特别慢,要么需要其他服务(=集成测试)。
所以,我这样进行:
import org.junit.jupiter.api.Tag;
public class ExampleTest {
@Test
public void testSomethingRegular() {
// ...
}
@Test
@Tag("IntegrationTest")
public void testDatabaseAccess() {
// ...
}
}
在pom.xml
中,我添加以下内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<excludedGroups>IntegrationTest</excludedGroups>
</configuration>
</plugin>
...
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
</dependencies>
总的来说,这很好用。我喜欢这个改变不是侵入性的--它不强迫我用@Tag("fast")
来标记每个“快速”单元测试,而且我不需要添加/激活任何新的Maven配置文件。
不过,我有两个问题:
1.在测试执行之后,我看到了Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
。testDatabaseAccess
是否可能被算作Skipped
,而不是被忽略?
1.如何强制按需执行testDatabaseAccess
?我试过mvn test -DincludedGroups=IntegrationTest -DexcludedGroups=aaa
,但它不起作用...
1条答案
按热度按时间lkaoscv71#
回答问题2-这可以使用Maven配置文件来实现:
默认情况下,执行
mvn clean install
将跳过标记为IntegrationTest
的单元测试,而执行mvn clean install -PallTests
将强制运行所有测试。并且不需要在.m2
目录或其他任何地方声明allTests
配置文件。