如何在线路覆盖中包含私有构造函数?
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);
}
Provides utility methods that enable access to (ie "de-encapsulate") otherwise non-accessible fields, methods and constructors belonging to code under test.
我正在使用 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);
}
Provides utility methods that enable access to (ie "de-encapsulate") otherwise non-accessible fields, methods and constructors belonging to code under test.