Причиной тестирования кода, который ничего не делает, является достижение 100% покрытия кода и уведомление об уменьшении покрытия кода.В противном случае всегда можно подумать: эй, у меня больше нет 100% покрытия кода, но это ВЕРОЯТНО из-за моих личных конструкторов.Это позволяет легко обнаружить непроверенные методы, не проверяя, что это был только частный конструктор.По мере роста вашей кодовой базы вы на самом деле почувствуете приятное теплое чувство, глядя на 100% вместо 99%.
IMO, лучше использовать рефлексию здесь, так как в противном случае вам придется либо получить лучший инструмент покрытия кода, который игнорируетэти конструкторы или как-то сказать инструменту покрытия кода игнорировать метод (возможно, Annotation или файл конфигурации), потому что тогда вы застряли бы с конкретным инструментом покрытия кода.
В идеальном мире все инструменты покрытия кода будутигнорировать приватные конструкторы, которые принадлежат к конечному классу, потому что конструктор существует как мера "безопасности" и ничего больше :)Я бы использовал этот код:
@Test
public void callPrivateConstructorsForCodeCoverage() throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException
{
Class<?>[] classesToConstruct = {Foo.class};
for(Class<?> clazz : classesToConstruct)
{
Constructor<?> constructor = clazz.getDeclaredConstructor();
constructor.setAccessible(true);
assertNotNull(constructor.newInstance());
}
}
А затем просто добавляйте классы в массив по мере продвижения.