マルチモジュールAndroidプロジェクトがあり、jacocoが報告するカバレッジとSonarqubeが報告するカバレッジの間に不一致が見られます。このプロジェクトは、さまざまな種類を生成するマルチフレーバープロジェクトでもあります。バリアント。私は このプラグイン を使用して、すべてのタスクを生成します。タスクは、バリアントごとに個別のレポートを生成します。
Jacocoレポートを実行すると、次のように表示されます。
プロジェクトにいくつかの除外がありますが、それらがなくてもカバレッジ%sは一致しません。
この質問: で示唆されているのと同じバイトコードを提供していないように感じます
これが私の関連情報です:Sonarバージョン5.6。
Gradleランナー
plugins { id "org.sonarqube" version "2.0.1" }
ソナー構成:(ルート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"
}
}
ソナー構成(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
}
私が見る限り、ブランチカバレッジは同じです。どちらの場合も40%、15がカバーされていません。
また、「指示」(JaCoCoレポートのスクリーンショットに表示)と他のものとの比較は、リンゴとオレンジの比較のようなものです。これらは同じことを表すものではありません。 JaCoCoが提供するカウンターについては、 http://www.eclemma.org/jacoco/trunk/doc/counters.html を参照してください。そして http://docs.sonarqube.org/display/SONAR/Metric+Definitions SonarQubeが示すものについて。手順の範囲はJaCoCoでのみ表示されます。
「lines」(SonarQubeのスクリーンショットに示されている「27.1%」)は「instructions」と同じではありません。通常、1行のコードには多くのバイトコード命令が含まれています。したがって、たとえば、合計で10行に100の命令があり、1行を20の命令でカバーしている場合、命令を80%見逃しましたが、行を90%見逃しました。
したがって、全体として、不一致はないか、少なくともスクリーンショットには表示されません。