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

当我运行 jacoco 报告时,我看到以下内容:

当我运行 Sonar 扫描仪时,我看到以下内容:

我的项目中有一些排除项,但即使没有它们,覆盖范围 %s 也不匹配。

我觉得我可能没有提供与 this question: 中暗示的相同的字节码

这是我的相关信息: Sonar 版本 5.6。

Gradle 运行者

plugins { id "org.sonarqube" version "2.0.1" } 

Sonar 配置:(在根 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 配置(在 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 配置 (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 
} 

请您参考如下方法:

据我所知,分支机构覆盖率是相同的:两种情况均为 40%,其中 15 个未覆盖。

“说明”(如 JaCoCo 报告的屏幕截图所示)与其他任何内容的比较就像苹果和橙子的比较 - 它们并不代表同一件事。请参阅http://www.eclemma.org/jacoco/trunk/doc/counters.html关于 JaCoCo 提供的计数器。和https://docs.sonarqube.org/latest/user-guide/metric-definitions关于 SonarQube 显示的内容。指令覆盖范围仅在 JaCoCo 中呈现。

“行”(SonarQube 屏幕截图中显示的“27.1%”)与“指令”不同:单行代码通常包含许多字节码指令。例如,如果总共 10 行中有 100 条指令,并且 1 行有 20 条指令,那么错过指令的概率为 80%,但错过行的概率为 90%。

所以总而言之,没有差异,或者至少没有显示在您的屏幕截图上。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!