Покрытие тестов не отображается в отчете SonarQube - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь отобразить покрытие тестов в SonarQube моего приложения Android Kotlin для кода в модуле приложения.Я могу сгенерировать результаты покрытия jacoco и отобразить Qualmetrics SonarQube, но проблема в том, что покрытие тестов не отображается в SonarQube :

https://imgur.com/a/xOjxLl1

в моей сборке.gradle моего проекта:

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

в моем 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

И сгенерируйте мой анализ сонара:отчет, в котором я вижу, что мое тестовое покрытие сгенерировано с правильным покрытием.

Итак, вопрос в том, что я могу изменить, чтобы отобразить свое сгенерированное покрытие jacoco в SonarQube?

(Я не уверен насчет sonarqube.properties, которые я добавляю в свой модуль приложения build.gradle)

1 Ответ

0 голосов
/ 08 августа 2019

У меня была такая же проблема в течение длительного времени, и решение состоит в том, чтобы изменить ваш путь в 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% покрытия в результате

Примечание: моя целевая папка называлась «снимок», но она может отличаться для вас

...