![](/img/trans.png)
[英]Mocking a static method which calls another static method of the same class
[英]Mocking static method of same class which needs to be tested in unit test
我有一个具有多个静态方法的类。 1个静态方法调用了另外1个私有方法,该私有方法最终调用了第二个公共静态方法。 我想模拟第二种静态方法。 那可能吗。 例如
public static A(){
b();
}
private static b(){
c();
}
public static c(){
}
我想模拟c(),但想保持a()和b()的功能不变。 这可能吗? 如果是这样,怎么办?
这个现有的SO 问题告诉您如何使用PowerMockito, 静态模拟以及Mockito的间谍概念来执行此操作。
但是,这些输入缺少什么:尽管这些技术解决方案有效,但您应该考虑不要走这条路。
相反:您创建了难以测试的设计。 现在,您正在寻找(黑色)模拟魔术以启用测试。 真正的答案是:退后一步,评估您的设计。 尝试对其进行返工,以使其易于测试。
从长远来看,其他一切都是浪费时间和精力。 因为难以测试的设计在“真实”场景中也很难测试,并且它们通常是不灵活的,并且随着时间的推移难以维护/增强。
正如@GhostCat所提到的:模拟静态方法的需求是一种糟糕的设计,因此您首先应该考虑重构代码,这样就不需要静态模拟。
Mockito不支持模拟静态方法。 在这里更多细节
您可以改用PowerMockito 。
例如:
PowerMockito.stub(PowerMockito.method(YourStaticClass.class, "c")).toReturn("someValue");
顺便说一句:看来您的方法没有返回类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.