首页 > 解决方案 > 无法在标记为 @SpringBootTest 的组件测试中加载 @Configuration 类

问题描述

我正在测试一项功能并编写了一个 componentTest 以确保该组件正常工作。问题是运行测试时@Configuration 类没有为测试加载。例子:

测试类:

@SpringBootTest(classes = Application.class)
public class ServiceTest{

//Do Something

}
@Configuration

public class ConfigurationClass{

@PostConstruct
public void doSomething(){
log.info("Test loading");
}

}

运行应用程序时,我可以看到应用程序启动时打印的日志。当我运行测试时,我看不到从ConfigurationClass. 我尝试使用@ContextConfiguration(classes=ConfigurationClass.class)但没有运气。

实际上,我希望在加载测试之前加载 configurationClass。

标签: javaspringspring-bootspring-mvcspring-test

解决方案


当您@SpringBootTest(classes = Application.class)使用指定的 运行时class,它会指示 Spring Boot 测试引擎仅加载定义的 bean,Application.java这些 bean 应该(通常)是@Configuration直接或间接使用注释注释的类。

如果您只想在测试中加载整个应用程序上下文,只需使用@SpringBootTest不带任何属性。现在在这种情况下,它将扫描最多一个带有@SpringBootConfiguration注释的包(它出现在带有注释的类上@SpringBootApplication,然后将向下扫描包以加载配置类。

当然,您应该确保测试能够找到@SpringBootApplication类,因为您应该将测试放在同一个包中或下面(当然,测试位于与主类所在的位置src/test/java相反。src/main/java


推荐阅读