我有一个具有多个静态方法的类。 1个静态方法调用了另外1个私有方法,该私有方法最终调用了第二个公共静态方法。我想模拟第二种静态方法。那可能吗。 例如
public static A(){
b();
}
private static b(){
c();
}
public static c(){
}
我想模拟c(),但想保持a()和b()的功能不变。这可能吗?如果可以,怎么办?
答案 0 :(得分:5)
此现有的SO question告诉您如何使用PowerMockito和 static 模拟以及Mockito的 spy 概念来做到这一点。
但是输入中缺少的内容:尽管这些技术解决方案有效,但您应该考虑不沿着这条道路走。
相反:您创建了一个难以测试的设计。现在,您正在寻找(黑色)模拟魔术以启用测试。真正的答案是:退后一步,评估您的设计。尝试对其进行重做,以使其变得容易进行测试。
从长远来看,其他一切都是浪费时间和精力。因为难以测试的设计在“真实”场景中也很难测试,并且它们通常是不灵活的,并且随着时间的推移难以维护/增强。
答案 1 :(得分:0)
@GhostCat提到:模拟静态方法的需要是不好的设计,所以您首先应该考虑重构代码,这样就不需要静态模拟。
Mockito不支持模拟静态方法。 更多详细信息here
您可以改用PowerMockito。
例如:
PowerMockito.stub(PowerMockito.method(YourStaticClass.class, "c")).toReturn("someValue");
顺便说一句:看来您的方法没有返回类型。