You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@ExtendWith(SpringExtension.class)失效:Spring Boot 2.x中JUnit 5测试Controller

排查Spring Boot 2.x中JUnit 5 @ExtendWith(SpringExtension.class)失效问题

嘿,我来帮你搞定这个@ExtendWith(SpringExtension.class)的问题!结合Spring Boot 2.x和JUnit 5的使用场景,我整理了几个最可能的原因和解决办法:

1. 核心问题:JUnit 4与JUnit 5注解混用

你当前代码里的import org.junit.Test;是JUnit 4的注解,而@ExtendWith是JUnit 5(Jupiter)的扩展注解,两者完全不兼容,这是最常见的失效原因。

解决办法:
把JUnit 4的@Test替换成JUnit 5的版本:

import org.junit.jupiter.api.Test; // 替换原来的org.junit.Test

2. 确认依赖配置正确性

Spring Boot 2.2.x及以上版本

这个版本的spring-boot-starter-test已经默认集成了JUnit 5依赖,并且自动排除了JUnit 4,不需要额外配置。如果你的pom.xml/gradle里手动添加了JUnit 4依赖,需要排除它:

  • Maven示例:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • Gradle示例:
testImplementation('org.springframework.boot:spring-boot-starter-test') {
    exclude group: 'junit', module: 'junit'
}

Spring Boot 2.2.x以下版本

需要手动添加JUnit 5的核心依赖:

  • Maven示例:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <scope>test</scope>
</dependency>

3. 简化测试类注解(Spring Boot 2.2+)

在Spring Boot 2.2及以上版本,@SpringBootTest、@WebMvcTest等测试注解已经默认集成了@ExtendWith(SpringExtension.class),你完全不需要手动添加这个注解,直接使用场景化的测试注解即可。比如Controller测试推荐用轻量的@WebMvcTest:

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;

@WebMvcTest(YourTargetController.class) // 替换为你的Controller类
public class ControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testEndpoint() throws Exception {
        mockMvc.perform(get("/your-api-path"))
                .andExpect(status().isOk())
                .andExpect(content().string("expected-response-content"));
    }
}

4. 检查IDE测试运行配置

部分IDE可能默认用JUnit 4运行器执行测试,需要手动切换:

  • 比如在IntelliJ IDEA中,右键测试类选择「Run」,进入运行配置界面,确认「Test runner」选择的是「JUnit 5」。

内容的提问来源于stack exchange,提问作者Anand Rockzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:48:01