Spring Cloud Contract测试找不到@SpringBootConfiguration如何解决?
问题原因
报错Unable to find a @SpringBootConfiguration的核心是Spring Boot测试框架无法自动识别到项目中带@SpringBootApplication注解的主启动类,常见触发场景是测试类的包路径和主启动类的包路径不匹配,没有在自动扫描范围内。
解决步骤
方案1:显式指定启动类(推荐,兼容性最好)
直接在测试基类的@SpringBootTest注解中声明你的项目主启动类即可,假设你的主启动类名为Application.java,修改测试基类代码:
// 替换成你自己项目的主启动类全限定名 @SpringBootTest(classes = Application.class) public abstract class RestBase extends TestBase { @Autowired private AccountHandler accountHandler; @BeforeEach public void setup() { RestAssuredWebTestClient.webTestClient(WebTestClient.bindToRouterFunction( new RouterConfig(accountHandler).routes()).build()); } }
方案2:调整测试类包路径
如果不想显式指定启动类,确保所有测试类所在的包是主启动类所在包的子包即可。比如主启动类在com.example包下,测试类放在com.example.rest、com.example.test这类子包下,Spring就能自动扫描到主启动类。
测试基类优化建议
你当前手动实例化RouterConfig的方式不符合Spring依赖注入规范,上下文已经托管了RouterConfig的Bean,你可以直接注入自动配置的WebTestClient简化代码,避免后续新增路由后还要手动修改测试基类:
@SpringBootTest(classes = Application.class) @AutoConfigureWebTestClient public abstract class RestBase extends TestBase { @Autowired private WebTestClient webTestClient; @BeforeEach public void setup() { RestAssuredWebTestClient.webTestClient(webTestClient); } }
修改完成后重新执行mvn clean install,上下文就能正常加载所有配置(包含Liquibase、JPA、Testcontainer PostgreSQL配置),报错即可解决。
内容的提问来源于stack exchange,提问作者user2800089
相关产品推荐
相关产品推荐

