Sonar Jacoco for Kotlin设置未生成代码覆盖率

26

我正在尝试使用Jacoco为Kotlin做Sonar设置以生成代码覆盖率报告,但没有显示任何代码覆盖率。在检查Sonar控制台时,显示以下错误信息。是否有人遇到过此问题,有什么建议可能会漏掉了什么。

元信息

插件使用的 SonarQube 版本为 "2.6.1"

gradleVersion = '3.0.1'

kotlinVersion = '1.2.21'

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

让人沮丧的是,我的设置项目生成了空的代码覆盖率报告:( 附上截图。

enter image description here

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

我添加了sonar和Jacoco gradle文件设置用于生成sonar-matrix报告。

enter image description here

这是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"
    }
}

这是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")
}

以下是我使用的Gradle命令,用于生成Jacobo报告和Soar报告。

./gradlew clean jacocoTestReport sonarqube

我注意到我得到了以下内容,可能是某些路径的问题。

覆盖率信息未被收集。也许您忘记将调试信息包含在编译后的类中了?

如果这看起来有点长,请原谅;但这是我找到的最好的摘要。还请注意,我尝试使用Java类而不是Kotlin进行类似的设置,它生成了代码覆盖率报告。


请问您能否编辑您的问题并包含您使用的SonarQube版本? - G. Ann - SonarSource Team
请检查您的SonarQube页面页脚,并添加您在那里找到的版本。我怀疑您标记为SonarQube版本的实际上是您扫描仪的版本。 - G. Ann - SonarSource Team
你使用的SonarJava版本是什么?你正在生成哪个版本的Jacoco报告?SonarJava 5.1添加了jacoco 8.0支持 - 我不确定你正在生成哪个版本,但这可能有关系。 - Simon Schrottner
我正在使用:SQube: 7.0,SRunner: 3.0.3.778。我没有明确提到Jacoco版本,应该使用最新版本(即jacoco-0.8.0)。 - CoDe
1
你考虑过使用Kover吗?我们转用它后发现它更加有帮助。 - Kerry
显示剩余6条评论
2个回答

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'
    ...
    }
}

1
不,我没有使用ANDROID_TEST_ORCHESTRATOR - CoDe

0

要使其适用于Kotlin,您需要做一些事情。

  • 确保您的SonarQube版本> 7.5
  • 如果您的SonarQube版本< 7.5,请让管理员安装Sonar-Jacoco插件。如果SonarQube版本< 5.5,请检查插件兼容性版本。
plugins {
    id "jacoco"
    id "org.sonarqube" version "2.7.1"
}

请访问以下网址:https://community.sonarsource.com/t/coverage-test-data-importing-jacoco-coverage-report-in-xml-format/12151

在您的 build.gradle 文件中添加属性,以便搜索 jacoco 结果。

property 'sonar.coverage.jacoco.xmlReportPaths', "${buildDir}/reports/jacoco/test/jacocoTestReport.xml"

请访问以下链接查看属性信息:https://docs.sonarqube.org/7.5/analysis/analysis-parameters/


谢谢您的回复。我现在没有相同的设置来尝试这个。但是您能否创建并共享存储库示例,以便其他人可以参考,那将是非常有帮助的。 - CoDe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接