无法在标记为 @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。

【问题讨论】:

ApplicationConfigurationClass 在哪些包中? 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 类的主要内容,如果未能解决你的问题,请参考以下文章

使用 SpringBootTest 和 Autowired 注解时 LogCaptor 无法捕获

@SpringBootTest - 无法加载应用程序上下文

关于特殊权限

SpringBootTest 和Testng组成测试套件

如何将选定的 uitableview 行发送到新创建的组

使用@SpringBootTest时如何在测试类中自动装配bean