如何在线路覆盖中包含私有构造函数?

How to include private contructor in Line Coverage?

我正在使用 jmockit 模拟我的 classes 以进行单元测试。目前一切正常。

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

因此对于以下 class,我可以获得 50% 的行覆盖率,因为我无法覆盖私有构造函数 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() 私有构造函数,以便我可以在我的 Cobertura 报告中为此 class 获得 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.