Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

489
Vistas
Pruebe el código generado automáticamente @UtilityClass de Lombok

Tengo una clase que está anotada con @UtilityClass como esta

 @UtilityClass public class myUtilClass { ... }

JaCoCo no me brinda una cobertura completa para esta clase debido al código generado automáticamente creado por la anotación @UtilityClass . Idealmente, no quiero cambiar ningún archivo de configuración para ignorar el código de generación automática. ¿Cómo se puede probar este código?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El único código "cubrible" generado por @UtilityClass está en el constructor:

 private MyUtilClass() { throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); }

Como este es un constructor private al que nunca se debe llamar, no puede probarlo con regularidad.

Si realmente quieres llamarlo, puedes hacerlo con un código reflectante feo:

 Constructor<MyUtilClass> constructor; constructor = MyUtilClass.class.getDeclaredConstructor(); constructor.setAccessible(true); constructor.newInstance();

Pero no debe hacer esto solo por el bien de la cobertura. Tener una alta cobertura generalmente es una buena idea, pero no si tiene que sacrificar buenos estándares de prueba.

Le sugiero que aconseje a JaCoCo que ignore el código de Lombok agregando esta línea a su archivo lombok.config :

 lombok.addLombokGeneratedAnnotation = true

No tiene que configurar esto para todo su proyecto. Si coloca este archivo solo en el paquete de MyUtilClass , JaCoCo solo ignorará el código generado en este paquete.

over 4 years ago · Santiago Trujillo Denunciar

0

Simplemente escriba esta prueba unitaria para asegurarse de que su clase no pueda ser instanciada debido a la anotación @UtilityClass. Entonces, la cobertura estará bien.

 @Test void test_cannot_instantiate() { assertThrows(InvocationTargetException.class, () -> { var constructor = YOUR_CLASS_NAME.class.getDeclaredConstructor(); assertTrue(Modifier.isPrivate(constructor.getModifiers())); constructor.setAccessible(true); constructor.newInstance(); }); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda