pom.xml配置<skipITs>true</skipITs>时,如何执行Maven Failsafe集成测试?
问题
我已经在pom.xml里设置了<skipITs>true</skipITs>,想按需运行集成测试,试过mvn -Prun-its clean verify和mvn verify -DskipITs=false,但测试还是被跳过。
pom.xml里的maven-failsafe-plugin配置如下:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <skipITs>true</skipITs> <parallel>methods</parallel> <useUnlimitedThreads>true</useUnlimitedThreads> <forkCount>1</forkCount> <reuseForks>true</reuseForks> </configuration> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-junit47</artifactId> <version>${surefire-version}</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter-version}</version> </dependency> </dependencies> </plugin> </plugins> </build>
执行mvn verify -DskipITs=false时的输出:
[INFO] --- maven-failsafe-plugin:2.22.2:verify (default) @ redis-service-integration-tests --- [INFO] Tests are skipped.
解决方案
问题核心是插件配置里硬编码的<skipITs>true</skipITs>优先级高于命令行传入的参数,导致你加的-DskipITs=false无法覆盖默认设置。以下两种方法都能解决:
方法1:用属性控制开关
- 在pom.xml的
<properties>节点定义默认值:
<properties> <skipITs>true</skipITs> </properties>
- 修改failsafe插件的配置,引用这个属性:
<configuration> <skipITs>${skipITs}</skipITs> <!-- 其他并行、线程等配置保持不变 --> </configuration>
之后默认不执行集成测试,需要运行时执行mvn verify -DskipITs=false即可。
方法2:用Profile按需启用测试
- 在pom.xml中添加一个专门用于运行集成测试的Profile:
<profiles> <profile> <id>run-its</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <skipITs>false</skipITs> <!-- 其他并行、线程等配置保持不变 --> </configuration> </plugin> </plugins> </build> </profile> </profiles>
- 需要运行集成测试时,执行
mvn -Prun-its clean verify,这个Profile会覆盖插件默认的跳过设置。
注:你使用的failsafe插件版本2.22.2本身支持skipITs参数,无需升级版本,调整配置即可解决问题。
内容的提问来源于stack exchange,提问作者Shagufta Oliveyu Methwani
相关产品推荐
相关产品推荐

