SpringBoot测试报Failed to load ApplicationContext异常如何解决
问题现象
运行主应用测试类时持续抛出java.lang.IllegalStateException: Failed to load ApplicationContext异常,应用上下文加载失败。
相关代码
主启动类 Application.java
@SpringBootApplication @ComponentScan(basePackages = { "com.aaa.abc","com.aaa.def" }) public class Application extends SpringBootServletInitilizer { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override protected SpringApplicationBuilder configure (SpringApplicationBuilder application) { return application.sources(Application.class); } }
初始测试类 ApplicationTest.java
@SpringBootTest class ApplicationTest { @Test void contextLoads() { } }
已尝试修复方案
在测试类的@SpringBootTest注解中指定Application类的加载路径,修改后仍抛出相同异常,修改后代码如下:
@SpringBootTest(classes={com.aaa.Application.class})
排查方向与修复方案
- 优先查看异常栈最底部的
Caused by嵌套异常信息,外层的Failed to load ApplicationContext是通用报错,具体根因(比如Bean找不到、配置缺失、类拼写错误、数据库连接失败等)都会在最内层异常里明确标注。 - 修正类名拼写错误:代码中继承的
SpringBootServletInitilizer拼写有误,正确类名为SpringBootServletInitializer,需重新导入对应包org.springframework.boot.web.servlet.support.SpringBootServletInitializer,拼写错误会直接导致类加载失败。 - 核对包扫描配置:如果主启动类
Application存放在com.aaa包下,你手动配置的@ComponentScan仅扫描com.aaa.abc、com.aaa.def两个子包,若存在其他包下的Bean、配置类未被纳入扫描范围,就会触发上下文加载失败。如果没有特殊分包需求,可删掉手动配置的@ComponentScan,SpringBoot默认会扫描主启动类所在包及其所有子包下的组件。 - 核对类路径配置:确认
@SpringBootTest(classes = ...)中填写的Application类全限定名和实际存放路径完全一致,注意包名、类名大小写不要出错。 - 核对配置文件加载:确认测试环境的
application.yml/application.properties配置(比如数据库地址、中间件连接、端口配置等)正确,配置错误也会导致上下文启动失败。
正确的测试类参考写法:
@SpringBootTest(classes = Application.class) class ApplicationTest { @Test void contextLoads() { } }
内容的提问来源于stack exchange,提问作者Sritam Jagadev
相关产品推荐
相关产品推荐

