需要在单元测试中测试的同类静态模拟方法

时间:2018-10-31 12:06:30

标签: java unit-testing

我有一个具有多个静态方法的类。 1个静态方法调用了另外1个私有方法,该私有方法最终调用了第二个公共静态方法。我想模拟第二种静态方法。那可能吗。 例如

public static A(){
    b();
} 
private static b(){
    c();
}
public static c(){
}

我想模拟c(),但想保持a()和b()的功能不变。这可能吗?如果可以,怎么办?

2 个答案:

答案 0 :(得分:5)

此现有的SO question告诉您如何使用PowerMockito和 static 模拟以及Mockito的 spy 概念来做到这一点。

但是输入中缺少的内容:尽管这些技术解决方案有效,但您应该考虑沿着这条道路走。

相反:您创建了一个难以测试的设计。现在,您正在寻找(黑色)模拟魔术以启用测试。真正的答案是:退后一步,评估您的设计。尝试对其进行重做,以使其变得容易进行测试。

从长远来看,其他一切都是浪费时间和精力。因为难以测试的设计在“真实”场景中也很难测试,并且它们通常是不灵活的,并且随着时间的推移难以维护/增强。

答案 1 :(得分:0)

@GhostCat提到:模拟静态方法的需要是不好的设计,所以您首先应该考虑重构代码,这样就不需要静态模拟。

Mockito不支持模拟静态方法。 更多详细信息here

您可以改用PowerMockito

例如:

PowerMockito.stub(PowerMockito.method(YourStaticClass.class, "c")).toReturn("someValue"); 

顺便说一句:看来您的方法没有返回类型。