JaCoCo сообщает о 0% покрытии кода

Я пытаюсь настроить тестовое покрытие с помощью jacoco, но пока безуспешно.

В моем build.gradle я добавил:

apply plugin: 'jacoco'

(...)

buildTypes {
    debug {
        testCoverageEnabled true
    }

(...)

task jacocoTestReport(type: JacocoReport, dependsOn: "test<MyFlavor>DebugUnitTest") {
    group = "Reporting"
    description = "Generate Jacoco coverage reports"

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

    def fileFilter = []
    def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
    def mainSrc = "${project.projectDir}/src/main/java"

    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = fileTree(dir: project.projectDir, includes:
            ['**/*.exec' , '**/*.ec'])
}

Затем я запускаю отчет о тестировании JaCoCo со следующим кодом:

./gradlew clean create<MyFlavor>DebugCoverageReport jacocoTestReport

Я вижу, что модульные тесты выполняются успешно, но когда я открываю отчет о тестировании, расположенный в:

<project>/build/reports/jacoco/jacocoTestReport/html/index.html

отчет кажется пустым, так как покрытие указано как «Н / Д», и даже не отображаются пакеты проектов.

Более того, если я попытаюсь открыть файл покрытия по адресу

<project>/build/jacoco/test<MyFlavor>DebugUnitTest.exec

при использовании Android Studio все классы сообщают о покрытии 0,0%.

Я использую gradle 3.0.1

Что я делаю неправильно? Это как-то связано с использованием ароматизаторов?


person pandre    schedule 23.01.2018    source источник
comment
Пожалуйста, покажите результат сборки gradle (ограниченный деталями Jacoco).   -  person C-Otto    schedule 23.01.2018


Ответы (2)


Я также боролся с UnitTests и JaCoCo. Я решил свою проблему, используя другой плагин.

В свой корень build.gradle добавьте:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.10.0'
    }
}

и примените плагин в своем модуле build.gradle:

apply plugin: 'com.vanniktech.android.junit.jacoco'

После синхронизации у вас должны появиться новые задачи gradle:

jacocoTestReport<<BuildVariant>>
person Christopher    schedule 23.01.2018
comment
Спасибо за ответ. Я пробовал этот плагин, но похоже, что он несовместим с gradle 3.0.1 :( - person pandre; 23.01.2018
comment
Хм, я так не думаю. У нас такая же версия плагина gradle android ... Но мы использовали в нашем коде версию 0.10.0 этого плагина. - person Christopher; 23.01.2018
comment
Идеально!. Это решение действительно сработало как шарм :) - person W00di; 23.11.2018

Нам удалось найти решение этой проблемы.

Похоже, что, поскольку мы используем ароматы Gradle, нам пришлось добавить аромат в строку classDirectories.

Вот наша текущая задача с этим изменением:

task jacocoTestReport(type: JacocoReport, dependsOn: "test<MyFlavor>DebugUnitTest") {
    group = "Reporting"
    description = "Generate Jacoco coverage reports"

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

    def fileFilter = []
    def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/<MyFlavor>/", excludes: fileFilter)
    def mainSrc = "${project.projectDir}/src/main/java"

    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = fileTree(dir: project.projectDir, includes:
            ['**/*.exec' , '**/*.ec'])
}
person pandre    schedule 23.01.2018
comment
откуда у вас есть этот тест пути к файлу ‹MyFlavor› DebugUnitTest) .. как я могу настроить это в моей папке gradle - person Srishti Roy; 06.08.2020