获取在 Junit 中自动装配的 @ConfigurationProperties bean

Posted

技术标签:

【中文标题】获取在 Junit 中自动装配的 @ConfigurationProperties bean【英文标题】:Get @ConfigurationProperties bean autowired in Junit 【发布时间】:2022-01-03 11:21:29 【问题描述】:

在此处输入代码我在 Spring Boot 中有一个用 @ConfigurationProperties 注释的类,如何在 Junit 测试中自动装配这个 bean

@ConfigurationProperties
 public class ConfigClass
   public String property;

--正在测试中--

@RunWith(MockitoJunitRuner.class)
 class MyTests

 @Autowired
 private ConfigClass configClass;

 @Test
 public myTest1()
   String prop = configClass.getProperty();
   //Some assert
 

-- 当我运行这个测试时,configClass 显示为空--

【问题讨论】:

【参考方案1】:

使用 jUnit 测试 springboot,您可以使用 @RunWith(SpringRunner.class) 或 @SpringbootTest 来加载整个上下文

如果您想专门测试您的配置,请使用 @TestConfiguration 注解。有两种使用注解的方法,要么在我们想要 @Autowire bean 的同一测试类中的静态内部类上,要么创建一个单独的测试配置类:

我会选择静态类中的第一个选项

见下面的例子,

@ConfigurationProperties
 public class ConfigClass
   public String property;

--Now under Test--

@RunWith(MockitoJunitRuner.class)
 class MyTests


 @Autowired
 private ConfigClass configClass;

**// here use the @TestConfiguration annotation not @Test**

 @TestConfiguration
 public myTest1()
   String prop = configClass.getProperty();
   //Some assert
 

//好的,现在有另一个像下面这样的类是测试的一部分,configClass 没有在那里自动装配,任何想法

注意:我建议使用第二个选项,即具有单独的测试配置类来自动装配类中的所有配置,如下所示

@TestConfiguration
public YourTestConfigurationClass ()

// plus all the other code which worked 

    @Component
    public class OtherClass
 
      @Autowired
      private ConfigClass configClass;
   

【讨论】:

我能够在 Junits 中获取组件和资源库 bean,但不能在 Configurationproperties 中获取 @KiranChannayanamath 你能显示你的代码吗? 我已经编辑了帖子,请找到代码。 @艾哈迈德霍斯尼 我已经更新了我的答案,请检查它是否适合你 是的,可以,但是我在您的代码中提到了另一个警告,请您检查一下,抱歉,我的原始帖子@AhmedHosny 中没有提到。

以上是关于获取在 Junit 中自动装配的 @ConfigurationProperties bean的主要内容,如果未能解决你的问题,请参考以下文章

Spring JUnit:如何在自动装配组件中模拟自动装配组件

在Camel JUnit中自动装配Spring Bean

Spring:在Junit中加载的类中自动装配不同的类

Spring 3 和 JUnit 4(自动装配)

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

在 JUnit 5 测试中模拟 Spring Boot 2 应用程序的自动装配依赖项