我正在使用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%的行覆盖率吗?
答案 0 :(得分:2)
使用反射或仅mockit.Deencapsulation.newInstance()
调用它。写一个像这样的测试方法
@Test
public void privateConstructorCoverage() throws Exception {
Deencapsulation.newInstance(TestFactory.class);
}
提供实用程序方法,允许访问属于被测代码的不可访问的字段,方法和构造函数(即"解封装")。