为什么我的Spring Boot项目中的测试类无法被Maven识别并执行?
问题原因分析
- 测试类命名与Maven默认测试执行规则不匹配
Maven默认负责单元测试的maven-surefire-plugin(绑定到test构建阶段)仅扫描符合以下命名规则的测试类:- 类名以
Test开头 - 类名以
Test/Tests/TestCase结尾
你当前的测试类命名为SampleIT,属于集成测试的默认命名规范,默认由maven-failsafe-plugin负责执行,该插件默认绑定到verify构建阶段,你执行mvn test/mvn install时不会触发该类的扫描执行。
- 类名以
- 缺少集成测试插件配置
你当前的pom文件中仅配置了spring-boot-maven-plugin,没有引入maven-failsafe-plugin,即使执行mvn verify也不会自动识别IT结尾的集成测试类。 - 存在代码与配置语法错误
- 测试类中注解拼写错误:
@Autowried应为@Autowired - 若
@Test注解导入的是Junit5的org.junit.jupiter.api.Test,与你使用的Junit4运行器SpringJunit4ClassRunner不兼容,也会导致测试不被识别 - 你贴出的pom文件中所有
dependency标签都缺少闭合标签</dependency>,会导致依赖加载异常,也可能影响测试扫描
- 测试类中注解拼写错误:
解决方案
- 方案1:作为单元测试直接执行
将测试类名修改为SampleTest,符合maven-surefire-plugin的默认命名规则,执行mvn test即可正常执行该测试。 - 方案2:保留IT后缀作为集成测试
在pom文件的build->plugins节点下添加maven-failsafe-plugin配置:
之后执行<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.22.2</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin>mvn verify即可触发所有IT结尾的集成测试执行。 - 方案3:修改Surefire扫描规则
如果你不想改类名也不想拆分单元/集成测试阶段,可以手动配置maven-surefire-plugin的扫描规则,将*IT类纳入扫描范围:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> <configuration> <includes> <include>**/*Test.java</include> <include>**/*IT.java</include> </includes> </configuration> </plugin> - 额外修复项:
修正测试类中的@Autowired拼写错误,确认@Test导入的是org.junit.Test,修正pom中所有dependency的闭合标签。
内容的提问来源于stack exchange,提问作者Neha
相关产品推荐
相关产品推荐

