【发布时间】:2013-10-22 14:50:14
【问题描述】:
如果在您正在测试的类中没有创建/初始化模拟对象,它不是静态的(单例模式),或者您没有某种类型的测试构造函数可以挂钩,如何在运行时获取模拟对象?
在我正在编写一些单元测试的课程中,我遇到了一个我还没有遇到/解决的场景。我有一个 JMS 资源(QueueConnectionFactory 供参考,但没关系),这是我正在测试的类的私有变量。由于它具有javax.annotation.Resource 注释,因此在运行时假定它是可用的。在测试期间,它不是,这就需要模拟这个对象。
它不是静态类,也不是以静态方式使用的,如果是的话,我可以使用我遇到的各种静态模拟方法轻松模拟。由于资源永远不会在本地创建(在构造函数中甚至在测试构造函数中),因此我无法传入 Mock 对象,以便在测试运行时使用模拟而不是实际对象。如何模拟此资源,以便在执行测试时,将使用它来代替我正在测试的类中的私有 @Resource 对象?
作为参考,代码在 QueueConnectionFactory 上调用 createConnection(),由于工厂尚未初始化/模拟,因此引发空指针异常。
@Stateless
public class Example{
@Resource(name = "jms/exampleQCF")
private QueueConnectionFactory queueFactory;
...
public void testMe(){
Connection connection = queueFactory.createConnection();
...
}
}
【问题讨论】:
标签: java mocking mockito powermock