【发布时间】:2015-10-22 13:08:51
【问题描述】:
我有一个类,它有一个通过 spring bean 设置的字段,并使用 @Autowired 进行注释,如下所示:
public class Foo {
....
@Autowired
private Bar bar;
....
}
我现在想设置一个 JUnit 测试来测试某些功能,这些功能在某些时候会创建一个 Foo 对象。我无法控制何时生成此 Foo 对象。模拟这个对象的最简单方法是什么,以便在 Foo 被实例化的任何时候,这个对象都会被模拟项填充?我正在使用第 3 方库很好地模拟 Bar 对象,因此我更愿意在 Java 测试类中完成所有这些操作,而不使用 xml 文件。
我在网上找到的所有内容似乎都涉及创建 xml 文件或模拟类的特定实例。谢谢大家的帮助!
我想要以下内容:
public class Test {
private Bar mockedBar = createBar();
// somehow set 'mockedBar' so that any Foo object
// created always contains mockedBar
}
【问题讨论】:
-
该问题中提供的答案需要我创建一个 Foo 对象才能使用 spy 注释。除非,通过创建 Foo 对象并使用 spy 允许 Foo 的任何实例化将 Bar 设置为 'mockedBar'
-
如果有一些功能会创建 Foo 对象,那么 Foo 对象不是 Spring 托管的 bean。你在实际应用中是如何设置 bar 的?
-
通过 applicationContext.xml。我可以创建一个包含信息的特定于测试的 applicationContext 文件,但是我想模拟的对象可以通过第 3 方 java 调用 createBar() 轻松创建。所以,如果可能的话,我宁愿使用它。
标签: java spring unit-testing mocking autowired