Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

486
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda