【问题标题】:Tests coverage not displayed in SonarQube reportSonarQube 报告中未显示测试覆盖率
【发布时间】:2019-07-07 10:09:13
【问题描述】:

我尝试在我的应用模块中的代码的 Android Kotlin 应用的 SonarQube 中显示测试覆盖率。我可以生成 jacoco 覆盖率结果并显示 SonarQube qualymetrics,但问题是 SonarQube 中未显示测试覆盖率

https://imgur.com/a/xOjxLl1

在我的项目的 build.gradle 中,我有:

...
dependencies {
    classpath 'org.jacoco:org.jacoco.core:0.8.3'
}
...

在我的 app 模块的 build.gradle 中

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'org.sonarqube'
apply plugin: 'jacoco'

jacoco {
    toolVersion = '0.8.3'
}

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
}
android {
   ...
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            testCoverageEnabled true
        }
        debug {
            testCoverageEnabled true
        }
     testOptions {
        animationsDisabled true
        unitTests {
            returnDefaultValues = true
            includeAndroidResources = true
        }
    }
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {

    reports {
        xml.enabled = true
        html.enabled = true
    }

    def fileFilter = [ '**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*' ]
    def debugTree = fileTree(dir: "$project.buildDir/tmp/kotlin-classes/debug", excludes: fileFilter)
    def mainSrc = "$project.projectDir/src/main/java"

    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = fileTree(dir: project.buildDir, includes: [
            'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec'
    ])
}

sonarqube {
    properties {
        property 'sonar.projectKey', 'mySonarKey'
        property 'sonar.projectName', 'myProjectName'
        property "sonar.host.url", "http://localhost:9000" // local sonar address

        property "sonar.java.binaries", 'target/classes,app/build/tmp/kotlin-classes'
        property "sonar.sources", 'src/main/java'
        property "sonar.tests", 'src/androidTest/java'

        property "sonar.java.coveragePlugin", "jacoco"
        property "sonar.coverage.jacoco.xmlReportPaths", "./build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml" //link to xml file that generated by jacoco
    }
}
...

我生成我的 jacoco 报告: gradlew clean jacocoTestReport

并使用以下命令生成我的声纳分析: gradlew sonarqube

jacoco 报告生成 myAppName\app\build\reports\jacoco\jacocoTestReport\jacocoTestReport.xml

我在报告旁边还有一个 html 文件夹,我可以在其中看到我的测试覆盖率以正确的覆盖率生成。

所以问题是我可以改变什么来在 SonarQube 中显示我生成的 jacoco 覆盖范围?

(我不确定我在应用模块 build.gradle 中添加的 sonarqube.properties)

【问题讨论】:

    标签: android kotlin sonarqube android-testing jacoco


    【解决方案1】:

    我很长一段时间都遇到同样的问题,解决方案是在 build.gradle 中更改您的路径:

    def debugTree = fileTree(dir: "$project.buildDir/tmp/kotlin-classes/debug", excludes: fileFilter)
    

    收件人:

    def debugTree = fileTree(dir: "$project.buildDir/tmp/kotlin-classes/snapshot", excludes: fileFilter)
    

    否则,生成的 .xml 文件将不包含整个源代码的覆盖率,因此 sonarqube 将显示 0% 的覆盖率

    注意:我的目标文件夹被称为“快照”,但对你来说可能不同

    【讨论】:

      猜你喜欢
      • 2016-10-13
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      • 2019-10-23
      • 1970-01-01
      • 2017-05-08
      相关资源
      最近更新 更多