繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM