如何在线路覆盖范围中包含私有构造器?

时间:2015-05-21 06:31:23

标签: java unit-testing mocking cobertura jmockit

我正在使用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%的行覆盖率吗?

1 个答案:

答案 0 :(得分:2)

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

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

Deencapsulation javadoc

  

提供实用程序方法,允许访问属于被测代码的不可访问的字段,方法和构造函数(即"解封装")。