Maven与Spring Boot环境下JUnit5测试被忽略问题求助
看起来你遇到的核心问题是IntelliJ能正常运行JUnit5测试,但Maven命令行执行时这些测试被跳过,结合你的Spring Boot版本和依赖配置,我整理了几个关键的修复步骤:
1. 升级Maven Surefire插件版本
旧版本的maven-surefire-plugin默认不支持JUnit5,这是最常见的原因之一。你需要在pom.xml中明确指定支持JUnit5的插件版本:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> <!-- 至少2.22.0以上版本才能支持JUnit5 --> </plugin> </plugins> </build>
如果你的项目继承了Spring Boot父pom,也可以借助Spring Boot的插件管理间接升级,但直接指定版本会更稳妥。
2. 正确配置spring-boot-starter-test依赖
因为你是从父pom继承的spring-boot-starter-test,不要自己指定version(否则会和父pom的依赖管理规则冲突),直接在你的pom中声明该依赖并排除JUnit4即可:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> <!-- 可选:如果还有其他JUnit4相关依赖(如旧版hamcrest),可一并排除 --> </exclusions> </dependency>
这样配置后,父pom的版本会被自动继承,同时彻底排除了JUnit4的依赖,避免和JUnit5产生冲突。
3. 验证依赖树,确保无残留JUnit4依赖
执行以下命令查看项目的依赖树,确认JUnit4的junit:junit依赖已经被完全移除:
mvn dependency:tree | grep junit
如果输出中仍出现junit:junit:4.x.x,说明有其他依赖间接引入了JUnit4,你需要找到对应依赖并添加排除规则。
4. 确保测试类没有混用JUnit4注解
虽然你的测试类看起来用了正确的JUnit5注解(org.junit.jupiter.api.Test),但还是要仔细检查:
- 没有导入
org.junit.Test(JUnit4的注解) - 所有生命周期注解都是JUnit5的(比如用
@BeforeEach而非@Before)
补充:简化Mockito和JUnit5的依赖配置
你当前的Mockito依赖可以简化,因为mockito-junit-jupiter已经内置了mockito-core的依赖,不需要单独声明:
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-junit-jupiter</artifactId> <version>${mockito-core.version}</version> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> </exclusion> <exclusion> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> </exclusion> </exclusions> </dependency>
这样能减少依赖冗余,避免潜在的版本冲突问题。
完成以上配置后,再执行mvn test命令,JUnit5的测试应该就能被Maven正常识别并执行了。
内容的提问来源于stack exchange,提问作者Laguh




