J'utilise actuellement un projet java multi module java avec une bonne couverture et sonarqube 6.2 avec le plugin sonarJava 4.10.0.1026. J'utilise Gradle 4.0.1, sonarqube plugin 2.5 et jacoco 0.7.9! Le code est java 8.Calcul de couverture erroné dans sonarqube 6.2 sur projet multi module Gradle
En raison du développement piloté par API, les tests API sont écrits en tant que tests abstraits dans les projets API et appelés à partir des projets d'implémentation fournissant les constructeurs pour les tests. Lors de l'analyse du projet sur le serveur sonarqube, la couverture des projets d'implémentation est mesurée correctement, mais les projets API inclus dans les tests des projets IMPL sont sur une couverture de 0,0%. Les résultats de la couverture pour ces projets sont ignorés. Lorsque j'ai simplement utilisé le plugin jacoco, j'ai pu obtenir le même comportement en utilisant simplement le plugin jacoco. Après avoir fait quelques recherches, j'ai trouvé une solution pour obtenir des rapports de jacoco appropriés:
task codeCoverageReport(type: JacocoReport) {
description "Creates a unified JaCoCo test report for the project."
// Gather execution data from all subprojects
// (change this if you e.g. want to calculate unit test/integration test
coverage separately)
executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")
// Add all relevant sourcesets from the subprojects
subprojects.each {
sourceSets it.sourceSets.main
}
reports {
xml.enabled true
html.enabled true
html.destination file("${buildDir}/reports/jacoco")
csv.enabled false
}
}
// always run the tests before generating the report
codeCoverageReport.dependsOn {
subprojects*.test
}
Mon résultat courant est le suivant:
JaCoCo:
- JaCoCo (codeCoverageReport-tâche)
- 73% Couverture des instructions
- 91% Couverture des branches
- Sonar
- 43,1% Couverture de ligne (lignes seulement ~ 30% pris en compte dans le calcul!)
- 82,1% Etat couverture (seulement ~ conditions 20% couverts!)
Ainsi, les résultats de couverture dans sonar ne sont pas utilisables. J'ai lu un post annonçant le "sonar.jacoco.reportPaths" -parameter commençant par sonar 6.2 et je pense que java-analyszer 4.4 ou sth. comme ça. Lors de l'ajout de ce paramètre à mon script de build gradle, le script ne se compile plus. Lors de l'ajout des fichiers jacoco .exec au sonar via l'administration du projet sonar, rien ne change.
Ce serait génial s'il y aurait un moyen de gérer sonar pour calculer la couverture correcte.
Il y a une tâche [JacocoMerge] (https://docs.gradle.org/4.0/dsl/org.gradle.testing.jacoco.tasks.JacocoMerge.html) qui peut fusionner plusieurs fichiers exec dans un –
va donner un autre essai les prochains jours. N'a pas fonctionné correctement les derniers jours lors des premiers tests. –
Il y a un exemple [ici] (https://github.com/gradle/gradle/blob/28fa962a330ea6085ea324381eec4f31dcf92d1c/subprojects/jacoco/src/integTest/groovy/org/gradle/testing/jacoco/plugins/JacocoPluginMultiVersionIntegrationTest.groovy#L142) dans les tests Gradle qui fusionne plusieurs tâches 'Test' dans un seul projet et génère un rapport fusionné. Vous pouvez adapter cela à votre configuration de multiprojet –