调用存根而不是原始方法

时间:2018-02-06 15:28:41

标签: java junit junit4

我应该测试一个类似于这样的项目:

public class A(){
   public static void init() {
     M.m();
     //some code
   }
}
public class M(){
   public static void m() {
     //some code
   }
}

我需要仅在init()中测试方法class A()。因此,我必须为M.m()创建一个模拟或存根,并使用与原始模型相同的签名。但不修改2个类中的任何内容,因为它不被允许。在这两种方法都是静态的情况下,如何让init()调用存根并忽略原始方法?

1 个答案:

答案 0 :(得分:1)

静态方法不能在没有反射的情况下进行存根或模拟,因为它们与类定义紧密相关。

如果您真的无法更改代码,请使用提供模拟静态方法的方法的PowerMock 如果您可以更改代码,请将此方法设为实例方法,并提供在M类中设置A依赖关系的方法。
所以你可以非常简单地存根M.m()