我有一個多模塊Android項目,我看到jacoco報告和Sonarqube報告的覆蓋率之間存在差異。 該項目也是一個多口味的項目,產生了很多不同的變種。我正在使用this plugin來幫助我生成所有任務。這些任務爲每個變體生成單獨的報告。Sonarqube整體覆蓋率與jacoco報告覆蓋率不匹配
當我跑我的jacoco報道我看到這一點:
我有我的項目的一些例外,但即使沒有他們的覆蓋率%s不匹配。
我覺得我可能無法提供相同的字節碼在this question:
這裏是我的相關信息暗示: 聲納5.6版。
搖籃轉輪
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"
}
}
聲納配置(在應用程序/的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
}
感謝您的回答。你能澄清一下嗎? 聲納顯示的28%覆蓋範圍是什麼? 注意聲納報告中28.8%的「覆蓋率」。我不太明白代表什麼以及它與雅可比報告的關係。 分支機構的覆蓋範圍是我應該關注的而不是遺漏的指示? –
「28.8%」 - 是線路覆蓋和分支覆蓋的組合,請參閱頁面http://docs.sonarqube.org/display/SONAR/Metric+Definitions關於計算方法,JaCoCo不計算此值。 「27.1%」 - 是線路覆蓋率,應在JaCoCo報告中呈現,但未在屏幕截圖中顯示(例如,請參閱http://www.eclemma.org/jacoco/trunk/coverage中的5欄「錯過/行數」)。 。 「關心」?你什麼意思?最初的問題是關於差異,以及如何使用代碼覆蓋率度量標準是一個不同的故事。 SonarQube提供分支和線路的彙總,以同時簡化兩者的監控。 – Godin
相應地更新了我的答案 – Godin