Java 调用存根而不是原始方法
我应该测试一个设计相当于以下内容的项目:Java 调用存根而不是原始方法,java,junit,junit4,Java,Junit,Junit4,我应该测试一个设计相当于以下内容的项目: public class A(){ public static void init() { M.m(); //some code } } public class M(){ public static void m() { //some code } } 我需要单独在class A()中测试方法init()。因此,我必须为M.M()制作一个与原始签名相同的模拟或存根。但不修改这两个类中的任何内容,因
public class A(){
public static void init() {
M.m();
//some code
}
}
public class M(){
public static void m() {
//some code
}
}
我需要单独在
class A()
中测试方法init()
。因此,我必须为M.M()
制作一个与原始签名相同的模拟或存根。但不修改这两个类中的任何内容,因为这是不允许的。在这两个方法都是静态的情况下,如何使init()
调用存根并忽略原始方法?静态方法不能在没有反射的情况下被存根或模拟,因为它们与类定义紧密绑定
如果您确实无法更改代码,请使用PowerMock,它提供了模拟静态方法的方法。如果您可以更改代码,请将此方法设置为实例方法,并提供一种在
a
类中设置M
依赖项的方法。因此,您可以非常简单地存根
M.M()
。如果依赖项未传递给调用方,则无法对其进行模拟或存根。请看@Zack Reda,这是一个很好的问题,但以前有人问过。你查过其他答案了吗?例如。最常见的建议是完全避免静态,因为它们很难测试:。@Jodiug感谢这些链接,是的,我已经检查了其中一些链接,但我不想使用任何模拟工具,我正在等待一个答案,解释当涉及到静态模拟时的反射functions@Zack如果我理解正确,您希望自己实现模拟逻辑。你能用这个要求更新这个问题吗?也许还有一个动机,就是为什么你不能使用现有的工具?