java - 如何在行覆盖中包含私有(private)构造函数?

标签 java unit-testing mocking cobertura jmockit

我正在使用 jmockit 来模拟我的类以进行单元测试。到目前为止一切都运行良好。

我有一个线程安全且单例的工厂,如下所示:

因此,对于下面的类,我可以获得 50% 的行覆盖率,因为我无法覆盖私有(private)构造函数 TestFactory()

public class TestFactory {

    // not able to cover this
    private TestFactory() {}

    private static class TestHolder {
        private static final TestClient INSTANCE = new TestClient();
    }

    public static IClient getInstance() {
        return TestHolder.INSTANCE;
    }
}

我的问题是 - 有什么方法可以覆盖 TestFactory() 私有(private)构造函数,以便我可以在此类的 Cobertura 报告中获得 100% 的行覆盖率?

最佳答案

使用反射或仅 mockit.Deencapsulation.newInstance() 调用它。写一个这样的测试方法

@Test
public void privateConstructorCoverage() throws Exception {
   Deencapsulation.newInstance(TestFactory.class);
}

Deencapsulation javadoc

Provides utility methods that enable access to (ie "de-encapsulate") otherwise non-accessible fields, methods and constructors belonging to code under test.

关于java - 如何在行覆盖中包含私有(private)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30366154/

相关文章:

python - 如何模拟具有设定大小的文件对象?

java - equal 和 instanceof 哪个性能更好?

java - 缓冲 REST 响应的方法

unit-testing - tox --parallel 命令的 <value> 是什么?

javascript - 如何测试 Firebase 登录操作 (React/Jest)

c# - C# 代码的单元测试,其中主要处理发生在 SQL 存储过程中

angular 2 - 具有 injectionToken 依赖性的模拟组件

python - 用pytest模拟一个导入的函数

java - 尝试从 zookeeper 节点 : (KeeperErrorCode: ConnectionLoss ) 获取数据时出现异常

java - 如何从.java代码创建安装安装程序?