web-dev-qa-db-fra.com

Améliorez la couverture du code Lombok @Data

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.

10
Varun Sharma

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%.

8
ahmetcetin

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% :))

32
mladzo

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();
}
4
Chris K