Sonar Jacoco为Kotlin Setup不生成代码覆盖率

CoD*_*oDe 17 android code-coverage jacoco sonarqube sonarqube-ops

我正在尝试使用Jacoco为Kotlin做声纳设置以生成代码覆盖率报告,但它没有显示任何代码覆盖率.在检查Sonar控制台时,它显示以下错误.任何人之前都遇到过这个问题,任何建议可能会错过.

元信息

插件使用sonarqube版本"2.6.1"

gradleVersion ='3.0.1'

kotlinVersion ='1.2.21'

Sonarqube版本=版本6.7.1(版本35068) - LGPL v3

令人沮丧的是,我的设置项目生成空白代码覆盖率报告:(.PFA.

在此输入图像描述

编辑:请找到项目结构快照.

我正在添加声纳和Jacoco gradle文件设置我正用于生成声纳矩阵报告.

在此输入图像描述

这是sonar.gradle文件:

sonarqube {

    properties {
        property "sonar.projectKey", "jacoco.sonar.test"
        property "sonar.projectName", "Sonar Jacoco Test"
        property "sonar.projectVersion", "1.1"

        property "sonar.java.source", "7"

        property "sonar.android.lint.report", "build/outputs/lint-results.xml"
        property "sonar.java.binaries", "build/tmp/kotlin-classes"
        property "sonar.java.test.binaries", "build/intermediates/classes/test/,build/tmp/kotlin-classes/devDebugUnitTest"
        property "sonar.tests","src/test/java"
        property "sonar.sources","src/main/java"
        property "sonar.java.coveragePlugin", "jacoco"
        property "sonar.jacoco.reportPaths","build/jacoco/testDevDebugUnitTest.exec"
        property "sonar.junit.reportsPath","build/test-results/testDevDebugUnitTest"
    }
}
Run Code Online (Sandbox Code Playgroud)

这里是jacoco.gradle文件

apply plugin: 'jacoco'

jacoco {
    toolVersion = "0.7.9"
    reportsDir = file("${project.projectDir}/app/build/reports")
}

task jacocoTestReport(type: JacocoReport, dependsOn: "app:testDevDebugUnitTest") {
    group = "Reporting"

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

    def fileFilter = ['**/R.class',
                      '**/R$*.class',
                      '**/BuildConfig.*',
                      '**/*$ViewInjector*.*',
                      '**/*$ViewBinder*.*',
                      '**/*$MembersInjector*.*',
                      '**/Manifest*.*',
                      '**/*Test*.*',
                      'android/**/*.*']

    classDirectories = fileTree(
            dir: "${project.projectDir}/app/build/intermediates/classes/dev",
            excludes: fileFilter
        ) + fileTree(
            dir: "${project.projectDir}/app/build/tmp/kotlin-classes/devDebug",
            excludes: fileFilter
        )

    // sources
    sourceDirectories = files(["${project.projectDir}/app/src/main/java"])
    executionData = files("${project.projectDir}/app/build/jacoco/testDevDebugUnitTest.exec")
}
Run Code Online (Sandbox Code Playgroud)

我用gradle命令生成Jacobo报告,然后报告.

./gradlew clean jacocoTestReport sonarqube
Run Code Online (Sandbox Code Playgroud)

我观察到我正在接受,必须发布一些路径.

未收集覆盖范围信息.也许您忘记将调试信息包含在已编译的类中?

对不起,如果这看起来有点长; 但这是我发现在一个地方总结的最好的.请注意我尝试使用Java类进行类似的设置,而不是使用kotlin来生成带代码覆盖率的报告.

Int*_*nti 0

如果您使用的是 android 测试协调器,这可能就是问题所在。

我今天遇到了同样的问题,禁用 Android 测试协调器后,覆盖范围再次正常工作。

错误报告:https ://issuetracker.google.com/issues/72758547

我不确定 Android Kotlin 构建是如何配置的,但在我的 Android Java 中,build.gradle我必须像这样注释掉测试编排器:

android {
...
    testOptions {
        // temporarily disable the orchestrator as this breaks coverage: https://issuetracker.google.com/issues/72758547
        //execution 'ANDROID_TEST_ORCHESTRATOR'
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)