我应该测试一个类似于这样的项目:
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()
调用存根并忽略原始方法?
答案 0 :(得分:1)
静态方法不能在没有反射的情况下进行存根或模拟,因为它们与类定义紧密相关。
如果您真的无法更改代码,请使用提供模拟静态方法的方法的PowerMock
如果您可以更改代码,请将此方法设为实例方法,并提供在M
类中设置A
依赖关系的方法。
所以你可以非常简单地存根M.m()
。