Spring Boot 自动装配配置类进入 Junit 测试

Posted

技术标签:

【中文标题】Spring Boot 自动装配配置类进入 Junit 测试【英文标题】:Spring Boot autowire configuration class into Junit Test 【发布时间】:2021-12-23 18:22:09 【问题描述】:

我目前在 Spring Boot 中遇到了 Junit 测试的问题。我有一个 @Configuration 类,我想为其测试 @Bean 方法。因为这些方法在测试期间被跳过,所以我将配置方法的内容提取到一个受保护的方法中,然后将在@Configuration 类的@Bean 方法中调用该方法。 我这样做是为了测试这些方法的行为。在这个方法中,不同的@ConfigurationProperties 用于加载一些设置。

现在,在我的 ConfigurationTest 类中,我正在模拟 ConfigurationProperties 类,以便测试 @Bean 方法的正确行为。

我的问题是,当我在 @Bean 方法内(更具体地说是在从 @Bean 方法调用的受保护方法内)时,我的 ConfigurationProperties 类的 Mockito 模拟总是返回 null。感觉我设置@Configuration 类的方式有问题。目前我正在自动装配它。

我现在的问题是,如何正确设置 @Configuration 类,以便调用它的函数并模拟使用的 @ConfigurationProperties 类的返回值?

提前致谢!

【问题讨论】:

你想在这个被测@Configuration 类上运行什么样的断言? 总的来说,没有人像这样测试配置bean。您可以通过测试它一起或单独创建的单个 bean 来间接测试它。您只需在要注入测试的 bean 上使用 @Autowired,这就是您知道 Configuration 是否创建它们的方式 如果你能展示一些代码,会更容易帮助你,也更容易理解。 【参考方案1】:

@EnableConfigurationProperties(value=YourConfigurationProperties.class) 添加到您的测试类。这将加载属性。

【讨论】:

以上是关于Spring Boot 自动装配配置类进入 Junit 测试的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot 自动装配

spring boot自动装配原理@EnableAutoConfiguration

Spring Boot核心特性之组件自动装配

Spring Boot 自动装配定义与自定义starter原理,及如何实现自定义装配

Spring Boot 自动装配定义与自定义starter原理,及如何实现自定义装配

Spring Security 自动装配