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