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