You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Maven与Spring Boot环境下JUnit5测试被忽略问题求助

解决Maven运行时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

火山引擎 最新活动