java如何在测试中注入bean的属性源
我正在Java的Spring中为我的服务编写单元测试。我模拟测试类中的所有依赖项,并在构造函数中实例化测试类,并将模拟类传递给构造函数。问题是被测试的类从中注入属性。属性文件转换为其中的字段(比如字符串)
在我测试的类中,我使用类级别上的@PropertySource
和字段级别上的@Value
的标准组合
正如我们所知,当类通过构造函数实例化时,属性注入失败(在Spring容器初始化期间不是作为bean)。你如何处理这样的问题
我有一个解决方案,尽管我认为它不好,也不令人满意,那就是:
1.正常地@Autowire
测试下的类,然后使用setter替换其所有依赖项
我还知道@TestPropertySource
注释,如果我理解正确,它不会提供解决方案,它只是覆盖现有属性的一种方法——事实并非如此,因为我们无法真正使用任何属性
提前感谢您的帮助:)
# 1 楼答案
这很简单:在单元测试中,将属性注入字符串字段,并在容器加载Spring上下文后调用的钩子方法中创建被测对象,而不是在测试类的构造函数中
在JUnit4中,用
@Before
指定这个钩子方法,在JUnit5中用@BeforeEach
指定这个钩子方法它会给出类似于:
请注意,为了更快地执行测试,应该只从Spring上下文加载测试所需的内容:环境部分