我正在使用遗留单元测试,该测试使用XX类的静态方法。我现在已经更改了类以从Spring应用程序上下文中获取字段值。单元测试现在失败,因为XX类无法初始化。
我无法使用dummysupport类包装类XX,因为要测试的逻辑很复杂,并且对XX类的调用嵌套在对其他遗留类的多层调用中。 所以我试图找到一种方法来模拟类类XX中的静态方法。有办法吗?我正在使用Jmock库。
答案 0 :(得分:4)
似乎没有办法在JMock中模拟静态方法。见this related thread。 JMock的创建者似乎认为,如果你的代码中有静态方法,你的代码就不值得使用JMock进行测试。
我建议使用像JMockit这样的工具,它提供功能更全面的模拟工具集。
答案 1 :(得分:1)
我过去也遇到过这个问题,并设法对其进行编码,因此我可以通过使该方法非静态但使用静态引用类来使用JMock。
例如
public ClassToMock {
public static final ClassToMock INSTANCE = new ClassToMock();
private ClasstToMock() {};
public void newNonStaticMethod1(){}
}
而不是
public ClassToMock {
public ClasstToMock() {};
public void static origStaticMethod1(){}
}
现在您的方法调用将是
ClassToMock.INSTANCE.newNonStaticMethod1();
因为newNonStaticMethod1()不是静态的,你现在可以嘲笑它。
由于CalssToMock ctor是私有的,因此只能通过静态实例访问。