Общее покрытие Sonarqube не соответствует охвату отчета jacoco

У меня есть проект с несколькими модулями Android, и я вижу несоответствие между охватом, который сообщает jacoco, и тем, что сообщает Sonarqube. Проект также представляет собой проект с несколькими вкусами, который генерирует много разных вариантов. Я использую этот плагин, чтобы помочь мне сгенерировать все задачи. Задачи генерируют индивидуальный отчет для каждого варианта.

Когда я запускаю отчеты о jacoco, я вижу следующее:

jacoco report

Когда я запускаю сканер сонара, я вижу это: отчет о сонарном покрытии

У меня есть некоторые исключения в моем проекте, но даже без них покрытие% s не соответствует.

Мне кажется, что я не могу предоставить тот же байт-код, что и в этот вопрос:

Вот моя соответствующая информация: Версия сонара 5.6.

Gradle бегун

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

Конфигурация сонара: (на 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"
    }
}

Конфигурация сонара (в приложении /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
}

Ответ 1

Насколько я вижу, охват веток один и тот же: 40% в обоих случаях, 15 непокрытых.

И сравнение "инструкций" (показано на снимке экрана отчета JaCoCo) с чем-либо еще похоже на сравнение яблок и апельсинов - они не представляют одно и то же. См. http://www.eclemma.org/jacoco/trunk/doc/counters.html о счетчиках, которые предоставляет JaCoCo. И http://docs.sonarqube.org/display/SONAR/Metric+Definitions о том, что показывает SonarQube. Покрытие инструкций представлено только в JaCoCo.

"lines" ( "27.1%", показанный на снимке экрана SonarQube) не совпадает с "инструкциями": одна строка кода обычно содержит много инструкций байткода. Так, например, если в общей сложности у вас есть 100 инструкций в 10 строках и 1 строка с 20 инструкциями, тогда пропущенные инструкции 80%, но пропущенные строки - 90%.

Итак, в целом, нет никакого расхождения или, по крайней мере, он не показан на ваших снимках экрана.