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

@SpringBootTest无法启动测试:上下文加载后测试未执行

排查Spring Boot测试无法执行的常见问题

看起来你的测试上下文能正常加载,但测试方法跑不起来,我帮你梳理几个最可能的原因,你可以逐一排查:

1. 检查JUnit注解的导入是否正确

你用了@RunWith(SpringRunner.class),这是JUnit 4的运行器配置,对应的@Test注解必须导入org.junit.Test。如果不小心导入了JUnit 5的org.junit.jupiter.api.Test,JUnit 4的运行器会识别不到这个测试方法,自然不会执行。

打开你的测试类,确认@Test的导入包:

// 正确的导入(JUnit4)
import org.junit.Test;
// 错误的导入(JUnit5,会导致测试不执行)
// import org.junit.jupiter.api.Test;

如果项目里同时引入了JUnit4和JUnit5的依赖,建议在spring-boot-starter-test里排除JUnit5相关依赖,避免版本冲突:

<!-- Maven依赖示例 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <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>

2. 确认测试类与主启动类的包结构匹配

Spring Boot测试默认会扫描测试类所在包及其子包下的组件,如果你的测试类WebAppTest和Spring Boot主启动类不在同一个根包下(比如主启动类在com.example.demo,测试类在com.example.test),就需要在@SpringBootTest里明确指定主启动类:

@SpringBootTest(classes = YourMainApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

虽然你说上下文加载成功,但如果没扫到控制器,测试请求会返回404;如果是测试方法根本不执行,这个可能不是核心原因,但也可以排查下。

3. 检查IDE的测试运行配置

有时候IDE的配置会导致测试无法执行:

  • 确认你的WebAppTest被IDE标记为测试类(比如IDEA里,src/test/java目录是蓝色的测试目录)
  • 右键测试方法运行时,选择的运行器是不是JUnit 4,而不是JUnit 5
  • 清理IDE缓存(比如IDEA里的File -> Invalidate Caches / Restart),缓存问题偶尔会导致测试不执行

4. 验证MockMvc的自动配置是否生效

虽然你加了@AutoConfigureMockMvc,但如果依赖缺失或者配置冲突,MockMvc可能没被正确注入。你可以在测试方法里加一行打印,看看mvc是不是null:

@Test
public void getTopJsonTest() throws Exception {
    System.out.println("MockMvc实例:" + mvc); // 检查是否为null
    mvc.perform( get("/api/v1/top")
            .contentType(MediaType.APPLICATION_JSON) )
            .andExpect(status().isOk())
            .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON));
}

如果是null,说明自动配置没生效,大概率是依赖的问题,回到第一步检查spring-boot-starter-test依赖是否完整。

先从这几个方向排查,最常见的就是JUnit注解导入错误或者依赖版本冲突的问题,应该能解决你的测试无法执行的问题。

内容的提问来源于stack exchange,提问作者Вадим Парафенюк

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:04:36