Sonarqube的整体覆盖范围与jacoco报告覆盖范围不匹配

时间:2016-10-24 20:19:49

标签: android sonarqube code-coverage jacoco

我有一个多模块Android项目,我发现jacoco报告的报道与Sonarqube报告的内容之间存在差异。 该项目也是一个多风味的项目,产生了许多不同的变种。我正在使用this plugin来帮助我生成所有任务。这些任务为每个变体生成单独的报告。

当我运行我的jacoco报告时,我看到了:

jacoco report

当我运行声纳扫描仪时,我看到: sonar coverage report

我的项目有一些例外情况,但即使没有它们,覆盖率%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
}

1 个答案:

答案 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%。

总而言之,没有差异,或者至少它没有显示在你的截图上。