我正在使用jmockit模拟我的类以进行单元测试。到目前为止,一切正常。

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

因此,对于以下课程,我无法获得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报告中获得100%的行覆盖率?

最佳答案

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

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


Deencapsulation javadoc


  提供可以访问(即“解封装”)否则属于被测代码的其他不可访问的字段,方法和构造函数的实用方法。

10-06 14:49