Unit testing 还有一个单元测试问题
我想对一个依赖性大约为10亿的类进行单元测试。在这个特定的例子中,我想测试一个有点像这样的方法:Unit testing 还有一个单元测试问题,unit-testing,mocking,mockito,private,powermock,Unit Testing,Mocking,Mockito,Private,Powermock,我想对一个依赖性大约为10亿的类进行单元测试。在这个特定的例子中,我想测试一个有点像这样的方法: class Suicide { IrrelevantObject n; ObjectsThatGetInitializedWhoTheFKnowsWhere m; private String privateFunc() { //... tons of things with dependencies // I am not testing this in th
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;
}
}
好的,问题是:
我已经读到,您不应该模拟私有方法,但在这种情况下,由于它们无休止的依赖关系,我非常希望对它们进行存根,以便测试该方法是否有效。如果我应该在私有方法中存根信息,我也可以看出这有什么意义,但我只是不知道如何使用Mockito或任何其他框架来实现这一点。非常感谢您的帮助。您可以简化这些依赖关系。例如,用接口替换它们
class Suicide
{
IIrrelevantObject n;
IObjectsThatGetInitializedWhoTheFKnowsWhere m;
如果这些接口不存在,请创建它们
然后,您只需让测试注入这些接口的模拟。有几种方法可以做到这一点:
- 添加setter(可能将它们称为
,这样,如果prod代码使用它,就会有一种清晰的气味)setForTest
- 使它们
并在测试中继承此类受保护
- 添加一个可以接受这些接口的构造函数,并在测试中使用这个构造函数
另一方面,您可能需要考虑端到端测试。ie:调用
main
,让代码像在prod中一样运行(可能在沙箱中)
- 优点:您不必再担心依赖性/私有性,因为您处于更高的级别
- 缺点:根据您的基础结构,实施此类测试可能并不总是简单的。(这些测试通常比单元测试慢)
无论如何,这两种方法并不是不兼容的欢迎使用堆栈溢出!你应该试着给你的问题一个有意义的标题,这样其他用户就可以看到他们对你的问题的期望。