Maven如何单独运行单元/集成测试?配置问题求助
解决Maven仅运行集成测试的问题
问题场景
项目测试目录结构如下:
- test - java - com - A - service - serviceB - DefaultServiceBTest.java - integration - DefaultServiceBIntegrationTest.java
当前使用Maven Surefire插件执行单元测试,Failsafe插件执行集成测试:
- Surefire配置排除
integration目录下的测试,执行mvn test可正常仅运行单元测试。 - Failsafe配置包含
**/integration/*.java,并绑定了integration-test和verify目标,但执行mvn verify -Pfailsafe时,会先运行单元测试再执行集成测试,不符合仅运行集成测试的需求。
原因分析
verify属于Maven的生命周期阶段,默认会依次执行之前的所有阶段,包括test阶段——而test阶段会触发Surefire插件的test目标,因此单元测试会被自动执行。
解决方案
方法1:直接调用Failsafe插件目标
不需要走完整的verify生命周期,直接执行Failsafe的两个关键目标:
mvn failsafe:integration-test failsafe:verify -Pfailsafe
这种方式跳过了test阶段,只会运行集成测试。
方法2:在Profile中配置跳过单元测试
如果必须使用mvn verify -Pfailsafe命令,需要在failsafe Profile中给Surefire插件添加跳过配置,确保test阶段不执行单元测试:
<profile> <id>failsafe</id> <build> <plugins> <!-- 跳过单元测试 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> <!-- 原Failsafe插件配置保留 --> <plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>${maven.failsafe.plugin.version}</version> <configuration> <includes> <include>**/integration/*.java</include> </includes> </configuration> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile>
配置完成后,执行mvn verify -Pfailsafe时,Surefire会跳过单元测试,仅运行Failsafe管理的集成测试。
两种方法对比
- 方法1操作简单,适合快速执行集成测试;
- 方法2保留了
verify生命周期的完整流程,适合需要在执行集成测试同时完成打包、质量检查等后续任务的场景。
内容的提问来源于stack exchange,提问作者Johnyb
相关产品推荐
相关产品推荐

