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

时间:2018-02-14 06:01:15

标签: android sonarqube jacoco sonarqube-ops

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

元信息

  

插件使用sonarqube版本“2.6.1”

     

gradleVersion ='3.0.1'

     

kotlinVersion ='1.2.21'

     

Sonarqube version = Version 6.7.1(build 35068) - LGPL v3

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

Kotlin

修改:请找到项目结构快照。

我正在加入声纳& Jacoco gradle文件设置我用来生成声纳矩阵报告。

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报告&然后飙升报告。

./gradlew clean jacocoTestReport sonarqube

我观察到以后我必须找到一些路径。

  

未收集覆盖范围信息。也许你忘了包括   将信息调试到编译的类中?

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

2 个答案:

答案 0 :(得分: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 :(得分:0)

要使Kotlin正常工作,您需要做的事情很少。

  • 确保声纳> 7.5
  • 如果您的声纳版本低于7.5,请管理员安装声纳-雅各可插件。如果sonarqube <5.5,请检查插件的兼容性版本。
import inspect

class Foo:
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

    def bar(self):
        temp_bar = Bar()
        # Creates a dummy object
        dummy = dir(type('Dummy', (object,), {}))

        # Iterates through all Foo object's attributes
        for item in inspect.getmembers(self):
            # Since the dummy object only has built-in attributes,
            # only custom-created ones will be used (in this case arg1 and arg2)
            if item[0] not in dummy:
                # Copies each attribute to temp_bar
                setattr(temp_bar, *item)

        return temp_bar


class Bar(Foo):
    # Overrides the __init__ method
    def __init__(self):
        pass


if __name__ == '__main__':
    foo = Foo(1, 2)
    print(foo.bar().arg1)
    print(foo.bar().arg2)

跟随该网址:https://community.sonarsource.com/t/coverage-test-data-importing-jacoco-coverage-report-in-xml-format/12151

在build.gradle中添加属性以搜索jacoco结果。

plugins {
    id "jacoco"
    id "org.sonarqube" version "2.7.1"
}

在该URL后面输入属性:https://docs.sonarqube.org/7.5/analysis/analysis-parameters/