我有一个多模块Android项目,我发现jacoco报告的报道与Sonarqube报告的内容之间存在差异。 该项目也是一个多风味的项目,产生了许多不同的变种。我正在使用this plugin来帮助我生成所有任务。这些任务为每个变体生成单独的报告。
当我运行我的jacoco报告时,我看到了:
我的项目有一些例外情况,但即使没有它们,覆盖率%s也不匹配。
我觉得我可能没有提供与this question:
中提示的字节码相同的字节码这是我的相关信息: 声纳版本5.6。
Gradle runner
plugins { id "org.sonarqube" version "2.0.1" }
Sonar config :(在root build.gradle上)
sonarqube {
properties {
property "sonar.projectKey", "com.xxx.myApp"
property "sonar.projectName", "Android My App"
property "sonar.projectVersion", "3.0"
property "sonar.java.binaries", "build/classes"
property "sonar.coveragePlugin", "jacoco"
property "sonar.jacoco.reportMissing.force.zero", "false"
}
}
Sonar config(在app / build.gradle上)
sonarqube {
properties {
property "sonar.sources", "src/main/java"
property "sonar.tests", "src/test/java"
property "sonar.java.tests", "src/test/java"
property "sonar.junit.reportsPath", "build/test-results/myAppGoogleMobileDebug"
property "sonar.java.binaries", "build/intermediates/classes/myAppGoogleMobile/debug"
property "sonar.jacoco.reportPath", "build/jacoco/testMyAppGoogleMobileDebugUnitTest.exec"
property "sonar.coverage.exclusions", coverageExclusions
}
}
Jacoco config on(app / build.gradle)
def coverageExclusions = ['**/AEWatchApp.*', '**/**_Factory.*',
'**/QaSettingsActivity.*',
'com/aetn/android/tveapps/activities/**',
'com/aetn/android/tveapps/test/**',
'com/aetn/android/tveapps/app/injection/modules/**',
'com/aetn/android/tveapps/app/injection/components/**',
'com.aetn.android.tveapps.mock/**',
'com/aetn/android/tveapps/databinding/**']
jacocoAndroidUnitTestReport {
csv.enabled false
html.enabled true
xml.enabled true
excludes += coverageExclusions
}
答案 0 :(得分:14)
据我所知,分支覆盖范围相同:两种情况下均为40%,未覆盖15种情况。
比较"指令" (在JaCoCo报告的屏幕截图中显示)与其他任何东西相比,如苹果和橙子的比较 - 它们不代表同样的东西。有关JaCoCo提供的计数器,请参阅http://www.eclemma.org/jacoco/trunk/doc/counters.html。关于SonarQube显示的内容http://docs.sonarqube.org/display/SONAR/Metric+Definitions。说明范围仅在JaCoCo中提供。
"线" (" 27.1%"在SonarQube的屏幕截图中显示)与"指令"不同:单行代码通常包含许多字节码指令。因此,例如,如果总共10条线路中有100条指令,并且有20条指令覆盖1条线路,则错过指令80%,但错过线路90%。
总而言之,没有差异,或者至少它没有显示在你的截图上。