Как включить private contructor в линейное покрытие?
Я использую 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()
частный конструктор, чтобы я мог получить 100% покрытие линии в моем отчете Cobertura для этого класса?
1 ответ:
Вызовите его с помощью отражения или просто
mockit.Deencapsulation.newInstance()
. Напишите такой тестовый метод@Test public void privateConstructorCoverage() throws Exception { Deencapsulation.newInstance(TestFactory.class); }
Предоставляет служебные методы, которые обеспечивают доступ к (т. е. "деинкапсулируют") недоступным в противном случае полям, методам и конструкторам, принадлежащим тестируемому коду.