我已将对象创建封装为https://code.google.com/p/mockito/wiki/MockingObjectCreation中指定的新方法[模式1:使用单行方法创建对象]
我在makeFoo方法之前使用了private。这使我的工作更加艰辛。
makeFoo方法不是私有的吗?
如果是这样,人们如何处理呢?
最佳答案
如果使用方法protected
,则可以在SUT的测试倍数中覆盖它。这样,您可以使方法返回一些模拟,间谍或其他类型的测试双精度。
但是,如果可能的话,我建议您在构造函数中注入依赖项类。它为您节省了一些麻烦和样板代码。在某些情况下,受保护的工厂方法是一种“更好”的解决方案,只是需要牢记的一点。
编辑:构造函数注入的示例:
从这里去
public class MyClass
{
private SomeDependency someDependency;
public MyClass()
{
this.someDependency = new SomeDependency(new A(), new B());
}
public void doWork()
{
_someDependency.doSomething();
}
}
对此
public class MyClass
{
private SomeDependency someDependency;
public MyClass(SomeDependency someDependency)
{
this.someDependency = someDependency;
}
public void doWork()
{
this.someDependency.doSomething();
}
}
这使您可以直接使用测试double来注入类,而不是继承它并覆盖某些工厂方法。