2
votes

Comment exclure certaines classes de la couverture du code? (Java)

Je pourrais déjà exclure les classes avec le rapport de cube sonar en ajoutant ceci dans la balise de mon fichier POM.

 <properties>
        <java.version>1.8</java.version>
        <sonar.exclusions> 
            /src/main/java/com/example/org/test/mainpackage/message/**/*
            ,
            /src/main/java/com/example/org/test/mainpackage/security/jwt/**/*
            ,
            /src/main/java/com/example/org/test/mainpackage/security/services/**/*
            ,
            /src/main/java/com/example/org/test/mainpackage/controller/AuthRestAPIs.java
            ,
            /src/main/java/com/example/org/test/mainpackage/controller/TestRestAPIs.java
        </sonar.exclusions>
    </properties>

Cependant, le même code lorsqu'il est exécuté localement pour tester la couverture de code ne fonctionne pas du tout.

Où dois-je configurer cela par programme avec Maven & Spring Boot?.

Je pourrais déjà exclure les cours que je souhaite via le

Paramètres> Génération, Exécution, Déploiement> Exclut> [Classe (s) à exclure]

ou à travers

Modifier les configurations> Sélectionnez l'onglet Couverture de code> puis ajoutez le package ou la classe que je souhaite exclure ou inclure uniquement dans le rapport de couverture de code.

Ce que je veux, c'est coder les classes à exclure c'est-à-dire dans le fichier pom comme je l'ai fait avec l'exclusion de code pour sonar qube.

Pour faire court. Comment faire cela par programme?.

La raison pour laquelle je voulais cela par programme est que, les deux étapes ci-dessus que j'ai effectuées pour exclure les fichiers d'être signalés dans la couverture de code sont qu'aucun fichier n'a été inclus dans tout mon projet que je pourrais pousser dans le référentiel afin que les modifications que j'ai apportées pour les exclusions se reflétera dans tous ceux qui tireront du dépôt git. Sans fichiers ni configurations ajoutés que je pourrais pousser et réfléchir à tous dans le dépôt. Cela signifie que mes exclusions ne fonctionneront que localement et ne fonctionneront pas sur les autres. Droite?. Donc, ici, je demande un moyen de faire par programme comme mettre les exclusions dans un fichier POM.


9 commentaires

Vous voulez dire que vous voulez le faire dans le code Java plutôt que dans le fichier POM?


oui, tant que son programme. BTW, je l'ai déjà fait via le fichier POM mais cela ne fonctionnait que pour la couverture de code Sonar Qubes et pas localement. Mon IntelliJ signale toujours une couverture de code très faible.


La raison pour laquelle je veux que cela soit fait par programme est que je ne veux pas parcourir les paramètres du projet à chaque fois juste pour ajouter des exclusions.Il semble également que cela ne sera pas reporté lorsque vous appuyez sur git car il n'y avait aucun fichier suivi dans mon projet qui a été ajouté lorsque j'ai fait une exclusion via IntelliJs Run Configuration ou Exclusions dans les paramètres. par conséquent, je voulais le faire via un fichier POM ou par programme afin que l'exclusion soit suivie par git et puisse être poussée qui prendra effet à ceux qui tirent du repo.


it only worked for Sonar Qubes Code Coverage and not locally . Il n'y a aucun moyen de savoir (la façon dont votre question est écrite) s'il y a une différence entre votre configuration locale et la configuration du serveur. Not working at all devrait être une description de ce que vous avez localement. Que se passe-t-il localement? Obtenez-vous une couverture de code? Ou obtenez-vous tout le code couvert et les exclusions du sondeur ignorées? Utilisez-vous des profils maven? Si oui, les profils sélectionnés sont-ils différents sur le serveur et locaux?


J'obtenais presque la même couverture de code avec le sonar et localement avant d'ajouter les exclusions pour le sonar. Cependant, ce n'est pas vrai car maintenant je n'ai pas de rapport de couverture de code correspondant localement car mon rapport de couverture de code local n'exclut toujours pas les classes que j'ai faites pour le sonar. Je ne sais pas comment faire cela par programme pour exclure les mêmes classes trop localement. Je ne connais pas les profils que vous dites, mais jusqu'ici c'est mon problème. Que les classes que j'ai exclues pour la couverture du code dans le sondeur ne sont pas exclues dans le rapport de couverture du code local avec IntelliJ.


Ce que j'essaie essentiellement de faire, c'est d'avoir au moins un rapport de couverture très proche avec le sonar puisque je vais exclure les mêmes classes que j'ai exclues avec la propriété sonar.exclusion dans le fichier pom. Pour le moment, ma couverture de code sonar rapporte une couverture de 86%, alors que localement, je n'obtiens que 40%, ce qui est un très gros écart. : /


Aussi, est-il possible de faire cette configuration en une seule fois?. Je veux dire, les exclusions pour le rapport de couverture du sonar se refléteront également sur le rapport de couverture de code réalisé localement par IntelliJ ?. Car pour le moment, il semble que les exclusions que j'ai faites ne fonctionneront qu'avec le sonar. Et je devrais peut-être vraiment avoir une configuration séparée, ce qui me convient de toute façon tant que la couverture du sonar et de l'intellij est la même.


Essayez d'exécuter le test de couverture en dehors d'IntelliJ (juste Maven) et vérifiez si cela se produit, juste pour supprimer l'EDI dans le cadre du problème


Je viens de le faire avec mvn test. Et je reçois un rapport beaucoup plus bas. Les classes que je souhaite exclure figurent toujours dans le rapport. : /


4 Réponses :


0
votes

Dans l' application.properties vous pouvez faire quelque chose comme ceci:

sonar.exclusions=src/main/java/com/example/org/test/mainpackage/message/**/*, 
src/main/java/com/example/org/test/mainpackage/security/jwt/**/*, 
src/main/java/com/example/org/test/mainpackage/security/services/**/*,
src/main/java/com/example/org/test/mainpackage/controller/AuthRestAPIs.java,
src/main/java/com/example/org/test/mainpackage/controller/TestRestAPIs.java

En outre, une autre façon sera de vous connecter en tant qu'administrateur dans le sondeur et d'accéder à

settings> Exclusions> Source File Exclusions - Ajoutez vos packages ici. Redémarrez le serveur.


6 commentaires

Ca ne fonctionne pas. Le rapport de couverture localement est toujours inchangé. J'ai même essayé d'exclure une seule classe, mais elle a été incluse dans le rapport de couverture avec ceci. Je veux dire, je l'ai déjà fait avec un sonar, j'en ai juste besoin pour travailler localement. Pour le moment, ma couverture rapporte localement et sur le sonar qube ne correspond pas du tout car les exclusions que j'ai faites pour le sonar qube ne sont pas configurées pour la couverture du code de test local. : /


@iamjoshua avez-vous redémarré le serveur après le changement?


Pour ma compilation locale ?, oui je l'ai fait.


@iamjoshua pour le serveur sonar -> redémarrage sonar.sh


non, ce n'est pas un problème de couverture de code lié au sonar. J'ai déjà corrigé cela. Il s'agit du rapport de couverture locale signalé par IntelliJ lorsque vous exécutez le projet avec Coverage.


application.properties n'est pas reconnu par le plugin Sounar ... si simple ne fonctionnera pas



2
votes

Ce n'est pas vraiment le genre de réponse que je recherchais. Mais pour l'instant, cela fera l'affaire pour moi. Toujours à la recherche d'un moyen de le faire via le fichier pom, java ou beans. Merci

Solution:

Donc, si vous avez fait vos exclusions dans la configuration d'exécution de votre projet. C'est à travers la 2ème étape que j'ai mentionnée dans la question qui est à travers

Modifier la configuration> Couverture du code. entrez la description de l'image ici


Et puis ajoutez vos exclusions. Il vous suffirait de cocher la zone de texte de partage et de cliquer sur Appliquer. Les exclusions que vous avez faites seront disponibles dans le répertoire de votre projet sous

.idea / runConfigurations / [le fichier xml des exclusions que vous avez effectuées et d'autres configurations d'exécution]. entrez la description de l'image ici

Et pour pouvoir pousser cela, retirez simplement le

.idea dans votre fichier .gitignore dans git. entrez la description de l'image ici


Et vous pourrez ensuite pousser les fichiers de configuration d'exécution dans votre référentiel pour que d'autres les utilisent. ou exporter afin qu'il n'ait pas à être configuré manuellement dans les configurations d'édition d'intellij.

PS: cela peut affecter le rapport de couverture de votre Sonarqube. Vous devez annuler cela et décompresser de votre dépôt la configuration d'exécution locale pour pouvoir utiliser vos exclusions de classe sonar qubes. Pour une raison quelconque dans la mienne, il a sauté toutes les exclusions que j'ai faites avant de faire cela.


0 commentaires

6
votes

Comme vous utilisez Maven, vous devez configurer vos exclusions dans le plugin jacoco, qui est utilisé pour capturer les statistiques de couverture et les transmettre au sondeur.

<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.1</version>
<executions>
        <execution>
            <id>prepare-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>report</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>report</goal>
            </goals>
            <configuration>
                <!-- Sets the path to the file which contains the execution data. -->
                <dataFile>target/jacoco.exec</dataFile>
                <!-- Sets the output directory for the code coverage report. -->
                <outputDirectory>target/jacoco-ut</outputDirectory>
            </configuration>
        </execution>
</executions>
<configuration>
    <systemPropertyVariables>
        <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
    </systemPropertyVariables>
    <excludes>
        <exclude>snmaddula/app/domain/*.class</exclude>
        <exclude>snmaddula/app/exception/*.class</exclude>
        <exclude>snmaddula/app/filter/*.class</exclude>
        <exclude>snmaddula/app/App.class</exclude>
    </excludes>
</configuration>
</plugin>

Références:


2 commentaires

Comment formater le répertoire dans la balise d'exclusion?. si j'ai ce répertoire à exclure. [/ src / main / java / com / example / org / test / mainpackage / controller / ‌ AuthRestAPIs.java] Pour le moment, j'utilise ce même répertoire pour exclure, et cela ne fait pas de brèche sur le code couverture du tout.


Salut Joshua, pour exclure un répertoire, utilisez <exclude>snmaddula/app/dto/**/*.class</exclude> , cela exclura toutes les classes et sous-packages du package dto .



0
votes

Par défaut, Intellij utilise Intellij IDEA comme programme d'exécution de couverture de code par défaut.

Si vous utilisez jacoco , changez cette option en JaCoCo . Les détails de ceci peuvent être trouvés sur le site Web de jetbrains . https://www.jetbrains.com/help/idea/configuring-code-coverage-measurement.html

En suivant ce qui précède, toutes les classes exclues définies dans votre <sonar.coverage.exclusions> seront prises en compte et correspondront à ce que vous avez dans la configuration de votre serveur SonarQube distant.


0 commentaires