J'écris des tests unitaires pour mon projet et j'essaie d'atteindre au moins 80% de couverture de code. Le problème est que j'utilise l'annotation @Data
De lombok pour générer des getters et des setters et quand j'exécute mes tests unitaires, tous ces getters et setters avec d'autres méthodes comme toString
, equals
, hashcode
etc sont manqués et ma couverture de code prend un coup. Existe-t-il une solution pour cela? J'ai beaucoup cherché à ce sujet mais je n'ai rien trouvé qui puisse aider. Toute aide à ce sujet serait appréciée.
J'utilise Eclemma pour l'analyse de la couverture du code.
Tout d'abord, l'annotation @Data est la combinaison de @ToString, @EqualsAndHashCode, @Getter et @Setter.
Si vous avez juste besoin de Lombok pour créer automatiquement des getters et setters, vous pouvez utiliser uniquement les annotations @Getter et @Setter au lieu de @Data.
De plus, pour garder les méthodes créées par Lombok en dehors de cette couverture, vous pouvez créer un fichier lombok.config dans votre répertoire racine et avoir ces deux lignes:
config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true
Après avoir ajouté cette ligne, lorsque vous allez à Sonar, vous verrez que ces classes sont couvertes 100%.
Dans version 0.8. , Jacoco a ajouté la prise en charge du filtrage de 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
indique à Lombok qu'il s'agit de votre répertoire racine et qu'il ne doit pas rechercher dans les répertoires parents plus de fichiers de configuration (vous pouvez avoir plusieurs fichiers de configuration lombok dans différents répertoires/packages).lombok.addLombokGeneratedAnnotation = true
ajoutera @ lombok.Generated annotation à toutes les méthodes générées par Lombok.Et c'est tout. Jacoco filtrera les méthodes générées automatiquement par Lombok, et si vous donnez le meilleur, votre couverture de code pourrait être proche de 100% :))
Lorsque equals et hashcode sont nécessaires, ils peuvent être testés de manière très approfondie en utilisant EqualsVerifier . EqualsVerifier est une bibliothèque JUnit open source 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 lors de l'écriture manuelle des tests.
Exemple d'utilisation:
@Test
public void equalsContract() {
EqualsVerifier.forClass( MyAwesomeLombokedDataClass.class )
.suppress( Warning.STRICT_INHERITANCE )
.verify();
}