Jmock - 如何模拟静态方法

时间:2012-09-06 17:35:45

标签: java testing junit jmock

  

可能重复:
  jmock mocking a static method

我正在使用遗留单元测试,该测试使用XX类的静态方法。我现在已经更改了类以从Spring应用程序上下文中获取字段值。单元测试现在失败,因为XX类无法初始化。

我无法使用dummysupport类包装类XX,因为要测试的逻辑很复杂,并且对XX类的调用嵌套在对其他遗留类的多层调用中。 所以我试图找到一种方法来模拟类类XX中的静态方法。有办法吗?我正在使用Jmock库。

2 个答案:

答案 0 :(得分:4)

似乎没有办法在JMock中模拟静态方法。见this related thread。 JMock的创建者似乎认为,如果你的代码中有静态方法,你的代码就不值得使用JMock进行测试。

我建议使用像JMockit这样的工具,它提供功能更全面的模拟工具集。

答案 1 :(得分:1)

我相信powermock允许您按照详细here

模拟静态

我过去也遇到过这个问题,并设法对其进行编码,因此我可以通过使该方法非静态但使用静态引用类来使用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是私有的,因此只能通过静态实例访问。