如何通过Maven仅执行Spring Boot中的集成测试?
解决Maven单元测试与集成测试分离执行的问题
这个问题我之前也碰到过,核心原因是Maven的生命周期执行顺序和测试插件的默认行为导致的——默认情况下执行integration-test或verify阶段时,会先跑完前面的test阶段(单元测试),再执行集成测试,所以两个测试类都会被运行。咱们可以通过配置maven-surefire-plugin(单元测试插件)和maven-failsafe-plugin(集成测试插件)来精准控制测试范围,同时按需选择执行命令。
第一步:配置测试插件
在你的pom.xml中添加以下插件配置,明确区分单元测试和集成测试的类规则:
<build> <plugins> <!-- 配置单元测试插件:仅运行以Test结尾的类,排除IT结尾的集成测试类 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <configuration> <includes> <include>**/*Test.java</include> </includes> <excludes> <exclude>**/*IT.java</exclude> </excludes> </configuration> </plugin> <!-- 配置集成测试插件:仅运行以IT结尾的类 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>3.2.5</version> <executions> <execution> <id>run-integration-tests</id> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> <configuration> <includes> <include>**/*IT.java</include> </includes> </configuration> </execution> </executions> </plugin> </plugins> </build>
第二步:按需执行测试命令
配置完成后,就可以根据需求选择对应的命令:
- 仅运行单元测试:执行
mvn test,此时只会运行StudentFastControllerTest - 仅运行集成测试:执行
mvn integration-test -DskipTests,通过-DskipTests参数跳过test阶段的单元测试,只执行StudentControllerIT - 全流程验证(单元+集成测试):执行
mvn verify,会先跑单元测试,再跑集成测试
补充说明
为什么原来执行mvn integration-test会跑两个测试?因为Maven的生命周期是按顺序执行的:test阶段在integration-test阶段之前,所以执行integration-test时会自动触发前面所有阶段的任务,包括test阶段的单元测试。通过-DskipTests参数可以临时跳过单元测试阶段,只专注于集成测试。
内容的提问来源于stack exchange,提问作者user1298426
相关产品推荐
相关产品推荐

