如何在不使用PowerMock的情况下测试私有方法(用例:创建对象)?

时间:2015-11-30 14:02:35

标签: java unit-testing junit mockito powermock

我已将对象创建封装到https://code.google.com/p/mockito/wiki/MockingObjectCreation中指定的新方法[模式1:使用单行方法创建对象]

我在makeFoo方法之前使用过 private 。这使我的工作更加努力。

makeFoo方法不是私有的吗? 如果是这样,人们如何处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

如果你制作方法protected,你可以在你的SUT的测试双重中覆盖它。这样你就可以让方法返回一些mock,spy或其他类型的test double。

但是,如果可能的话,我建议你在构造函数中注入依赖项类。它可以为您节省一些头痛和锅炉板代码。有些情况下,受保护的工厂方法是一个“更好”的解决方案,但需要记住一些事项。

编辑:构造函数注入的示例:

从这里开始

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();
    }
}

这允许您直接为您的类注入test double,而不是继承它并覆盖某些工厂方法。