java - 如何在不使用 PowerMock 的情况下测试私有(private)方法(用例 : object creation)?

标签 java unit-testing junit mockito powermock

我已将对象创建封装到 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/

相关文章:

node.js - 如何在 NodeJS 中模拟流

java - Mockito 可以验证模拟对象上的方法调用总数吗?

php - 如何在 PHP 中对具有依赖关系的方法进行单元测试?

java - 只看算法代码计算时间复杂度

java - 在多个项目/模块中使用多个属性文件(通过 PropertyPlaceholderConfigurer)

java - 内存不足 Tomcat(无法创建新的 native 线程)

java - PowerMockRule 与 EasyMock 一起 NOT Moquito

java - 比较 Java diff 类中的 XML 文档 - 获取行号?

java - gradle junit 和错误 : cannot find symbol

java - 从 windows 机器发送多个文件到 linux 远程服务器 "Jsch code"