我已将对象创建封装为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来注入类,而不是继承它并覆盖某些工厂方法。

10-07 17:29