我想对一个具有大约十亿个依赖项的类进行单元测试。在这种特定情况下,我想测试一个看起来有点像这样的方法:
class Suicide
{
IrrelevantObject n;
ObjectsThatGetInitializedWhoTheFKnowsWhere m;
private String privateFunc()
{
//... tons of things with dependencies
// I am not testing this in this test.. or should I?
}
public String testFunc()
{
String x = "";
String y = privateFunc();
if(n.anotherPrivateFunc(y) == 5)
x = "yolo";
return x;
}
}
好的,这就是问题所在: 我已经读过你不应该模拟PRIVATE方法,但在这种情况下,由于它们无休止的依赖关系,我迫切希望将它们存根,以便我可以测试该方法的工作原理。如果我应该在私有方法中存根信息,我可以看到它是如何有意义的,但我不知道如何使用Mockito或任何其他框架来做到这一点。非常感谢你的帮助。
答案 0 :(得分:0)
您可以简化这些依赖项。例如,用接口替换它们。
class Suicide
{
IIrrelevantObject n;
IObjectsThatGetInitializedWhoTheFKnowsWhere m;
如果这些接口不存在,请创建它们!
然后你必须让你的测试注入这些接口的模拟。有几种方法可以做到这一点:
setForTest
,这样如果prod代码使用它就会有一种清晰的气味)protected
并在测试中继承此类现在,您遇到了一个具有大量依赖关系的类,但您可以轻松地模拟依赖关系。所以你不再特别需要嘲笑私人了。
另一方面,您可能需要考虑端到端测试。即:调用main
并让代码在prod中运行(可能在沙盒中)。
无论如何,两种方法都不相容