2017-06-16 3 views
0

J'écris des tests unitaires pour mon projet et j'essaie d'atteindre une couverture de code d'au moins 80%. Le problème est que j'utilise l'annotation @Data de lombok pour générer des getters et setters et quand j'exécute mes tests unitaires, tous ces getters et setters ainsi que d'autres méthodes comme toString, equals, hashcode etc. sont manqués et ma couverture de code prend un coup. Y at-il une solution de contournement pour cela. J'ai beaucoup cherché à ce sujet, mais je n'ai pas été en mesure de trouver quelque chose qui pourrait aider. Toute aide à ce sujet serait appréciée. J'utilise Eclemma pour l'analyse de la couverture de code.Améliorer la couverture du code de données de Lombok

+0

comme Nico Van Belle a déclaré que les classes de tests unitaires n'étaient pas écrites pour la couverture de code ... le but devrait être la validation des unités ... plus tard si des problèmes sont présents, ces classes devraient les aider à les trouver. @NicoVanBelle lombok n'est pas si mauvais ..: p :) – Akshay

+0

@NicoVanBelle Je comprends votre point de vue. Je mentionnais simplement que je visais environ 80% de couverture de code mais ce n'est pas la raison pour laquelle j'écris les cas de test. L'intention est de tester différentes unités indépendamment. –

+0

@VarunSharma Je pense que cela signifie que votre classe n'est pas couverte. Avez-vous modifié la constante MODEL_PACKAGE pour vous référer à votre package? – Akshay

Répondre

1

L'annotation @Data est la combinaison de @ToString, @EqualsAndHashCode, @Getter et @Setter.

Si vous avez besoin de Lombok pour créer des accesseurs et des setters automatiquement, vous pouvez utiliser uniquement les annotations @Getter et @Setter au lieu de @Data.

1

Lorsque l'égalité et le code de hachage sont nécessaires, ils peuvent être testés très unitairement en utilisant EqualsVerifier. EqualsVerifier est une bibliothèque JUnit opensource qui génère les tests unitaires pour toutes les parties des contrats equals et hashCode, ce qui n'est pas simple à réaliser même lorsque vous écrivez les tests manuellement.

Exemple d'utilisation:

@Test 
public void equalsContract() { 
    EqualsVerifier.forClass(MyAwesomeLombokedDataClass.class) 
     .suppress(Warning.STRICT_INHERITANCE) 
     .verify(); 
} 
1

En 0.8.0 release, Jacoco a ajouté le support pour filtrer toutes les méthodes annotées avec @lombok.Generated de leurs rapports. La seule chose que vous devez changer est d'ajouter lombok.config à la racine de votre projet avec les paramètres suivants:

config.stopBubbling = true 
lombok.addLombokGeneratedAnnotation = true 
  • config.stopBubbling = true dit Lombok que c'est votre répertoire racine et qu'il ne faut pas rechercher les répertoires parents pour plus fichiers de configuration (vous pouvez avoir plus d'un fichier de configuration lombok dans différents répertoires/paquets).
  • lombok.addLombokGeneratedAnnotation = true ajoutera @ lombok.Generated annotation à toutes les méthodes générées par Lombok.

Et c'est tout. Jacoco va filtrer les méthodes auto-générées de Lombok, et si vous donnez le meilleur, votre couverture de code pourrait être proche de 90% :))