无法在标记为 @SpringBootTest 的组件测试中加载 @Configuration 类
Posted
技术标签:
【中文标题】无法在标记为 @SpringBootTest 的组件测试中加载 @Configuration 类【英文标题】:Cannot load @Configuration class in component test marked as @SpringBootTest 【发布时间】:2021-08-20 07:44:34 【问题描述】:我正在测试一项功能,并编写了一个 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。
【问题讨论】:
Application
和 ConfigurationClass
在哪些包中?
java/com.example.spring.context 中的应用和 java/com.example/spring.context.service.log 中的 configurationClass
【参考方案1】:
当您使用指定的class
运行@SpringBootTest(classes = Application.class)
时,它会指示spring boot 测试引擎仅加载Application.java
中定义的bean,这应该(通常)是一个直接使用@Configuration
注释的类,或者间接的。
如果您只想在测试中加载整个应用程序上下文,只需使用不带任何属性的@SpringBootTest
。现在在这种情况下,它将扫描最多一个带有@SpringBootConfiguration
注释的包(它出现在带有@SpringBootApplication
注释的类上,然后将向下扫描包以加载配置类。
当然你应该确保测试能够找到@SpringBootApplication
类,因为你应该把测试放在同一个包或下面(当然测试在src/test/java
而不是@ 987654330@ 你的主要班级所在的地方。
【讨论】:
以上是关于无法在标记为 @SpringBootTest 的组件测试中加载 @Configuration 类的主要内容,如果未能解决你的问题,请参考以下文章