Solución:
yo suelo enum
para las clases de servicios públicos y la mayoría de las herramientas de cobertura saben ignorar sus métodos.
public enum Util { ;
enum
están final
con private
constructores por defecto.
Esta pregunta tiene actualmente más de un año; sin embargo, pensé que podría ofrecer una alternativa a ignorar a los constructores privados en las pruebas unitarias. Aunque es bastante improbable, es posible eludir un constructor privado en Java. Además, es posible que la clase se modifique en el futuro, alguien podría agregar un constructor, etc. Tener una prueba unitaria que verifique esto puede parecer redundante, pero agrega otro nivel de claridad de intención. Una prueba unitaria fallida sin duda llamaría mi atención: “Hice que una prueba unitaria fallara, ¿estoy seguro de que sé lo que estoy cambiando aquí?”
Sin más preámbulos, aquí hay un código de muestra.
Aquí tenemos una clase con un constructor privado.
public final class ClassWithPrivateCtor
{
private ClassWithPrivateCtor()
{
throw new AssertionError(String.format(
"Illegal instantiation of class: %s.",
this.getClass().getName()));
}
}
Esta es una forma de invocar un constructor privado en Java.
private static <T> void invokePrivateConstructor(final Class<T> type)
throws Throwable
{
final Constructor<T> constructor = type.getDeclaredConstructor();
constructor.setAccessible(true);
try
{
constructor.newInstance();
}
catch (InvocationTargetException ex)
{
throw ex.getTargetException();
}
}
Y así es como lo uso en mis pruebas unitarias.
@Test(
description = "Verify ClassWithPrivateCtor private constructor fails.",
expectedExceptions = AssertionError.class)
public void classWithPrivateCtorTest()
throws Throwable
{
invokePrivateConstructor(ClassWithPrivateCtor.class);
}
Me he acostumbrado a verificar los constructores privados de esta manera solo para tener claro la intención original de la clase, ya sea una clase de utilidad o una clase con constantes, etc.