我已将对象创建封装到 https://code.google.com/p/mockito/wiki/MockingObjectCreation 中指定的新方法中[模式一:使用单行方法创建对象]
我在 makeFoo 方法之前使用了 private 。这让我的工作更加困难。
makeFoo 方法不需要 private 吗? 如果是这样,人们是如何处理的?
最佳答案
如果您使方法 protected
,您可以在 SUT 的测试替身中覆盖它。通过这种方式,您可以使该方法返回一些模拟、 spy 或其他类型的测试替身。
但是,如果可能的话,我建议您在构造函数中注入(inject)依赖类。它可以为您节省一些头痛和样板代码。在某些情况下, protected 工厂方法是一个“更好”的解决方案,但要记住这一点。
编辑:构造函数注入(inject)示例:
从此开始
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();
}
}
这允许您直接使用测试替身注入(inject)类,而不是继承它并覆盖某些工厂方法。
关于java - 如何在不使用 PowerMock 的情况下测试私有(private)方法(用例 : object creation)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34000429/