Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

476
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!