Фильтр отчетов о покрытии JaCoCo с Gradle



:


у меня есть проект с jacoco и я хочу иметь возможность фильтровать определенные классы и/или пакеты.



Документация:



Я прочитал следующую документацию:



официальный сайт jacoco:
http://www.eclemma.org/jacoco/index.html



официальные документы jacoco для gradle: https://gradle.org/docs/current/userguide/jacoco_plugin.html



официальный jacoco Github вопросы, работа по охвату:
https://github.com/jacoco/jacoco/wiki/FilteringOptions
https://github.com/jacoco/jacoco/issues/14



Связанные Ссылки StackOverflow:



JaCoCo & Gradle-параметры фильтрации (нет ответа)



исключить пакеты из отчета Jacoco с помощью Sonarrunner и Gradle (Не используя гидролокатор)



JaCoCo-исключить JSP из отчета (похоже, это работает для maven, я использую gradle)



конфигурация Maven Jacoco-исключить классы / пакеты из отчета не работает (кажется, это работает для maven, я использую gradle)



JaCoCo gradle plugin exclude (не удалось заставить это работать)



Gradle Jacoco - отчеты о покрытии включают классы, исключенные из конфигурации (кажется, очень близко, он использовал doFirst, не работает я)



пример того, что я пробовал:



apply plugin: 'java'
apply plugin: 'jacoco'

buildscript {
repositories {
mavenCentral()
jcenter()
}
}

repositories {
jcenter()
}

jacocoTestReport {
reports {
xml {
enabled true // coveralls plugin depends on xml format report
}

html {
enabled true
}
}

test {
jacoco {
destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
classDumpFile = file("$buildDir/jacoco/classpathdumps")
excludes = ["projecteuler/**"] // <-- does not work
// excludes = ["projecteuler"]
}
}
}


вопрос:



как я могу исключить определенные пакеты и классы при создании отчетов о покрытии jacoco?

746   5  

5 ответов:

спасибо, Yannick Welsch:

после поиска в Google, чтения документов Gradle и просмотра старых сообщений StackOverflow, я нашел этот ответ на официальном ш форумы!

jacocoTestReport {
    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it, exclude: 'com/blah/**')
        })
    }
}

источник:https://issues.gradle.org/browse/GRADLE-2955

решение build.gradle для Java / Groovy проектов:

apply plugin: 'java'
apply plugin: 'jacoco'

jacocoTestReport {
    reports {
        xml {
            enabled true // coveralls plugin depends on xml format report
        }

        html {
            enabled true
        }
    }

    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it,
                    exclude: ['codeeval/**',
                              'crackingthecode/part3knowledgebased/**',
                              '**/Chapter7ObjectOrientedDesign**',
                              '**/Chapter11Testing**',
                              '**/Chapter12SystemDesignAndMemoryLimits**',
                              'projecteuler/**'])
        })
    }
}

Как видите, мне удалось добавить больше exclude: для того, чтобы отфильтруйте несколько пакетов.

источник: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle

пользовательские задачи для других проектов, таких как Android:

apply plugin: 'jacoco'

task jacocoReport(type: JacocoReport) {
    reports {
        xml {
            enabled true // coveralls plugin depends on xml format report
        }

        html {
            enabled true
        }
    }

    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it,
                    exclude: ['codeeval/**',
                              'crackingthecode/part3knowledgebased/**',
                              '**/Chapter7ObjectOrientedDesign**',
                              '**/Chapter11Testing**',
                              '**/Chapter12SystemDesignAndMemoryLimits**',
                              'projecteuler/**'])
        })
    }
}

источник: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59

для меня это нормально работать с

test {
  jacoco {
    excludes += ['codeeval/**',
                 'crackingthecode/part3knowledgebased/**',
                 '**/Chapter7ObjectOrientedDesign**',
                 '**/Chapter11Testing**',
                 '**/Chapter12SystemDesignAndMemoryLimits**',
                 'projecteuler/**']
  }
}

как указано в документации https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 и поначалу спросил Итак, ответ:

поэтому, если вы спросите меня: это не вопрос

excludes = ["projecteuler/**"]

или

excludes += ["projecteuler/**"]

но

excludes = ["**/projecteuler/**"]

чтобы исключить пакет *.projecteuler.*

и test {} на уровне проекта, не вложенные в jacocoTestReport

здесь является решением этой проблемы в ANT. Это может быть адаптировано для gradle, добавив следующее под jacocoTestReport задач. Хотя это на самом деле не задокументировано jacoco, это похоже на единственный способ фильтровать результаты тестов на данный момент.

afterEvaluate {
    classDirectories = files(classDirectories.files.collect {
        fileTree(dir: it, exclude: 'excluded/files/**')
    })
}

Это было на некоторое время, но я только что наткнулся на это. Я боролся со всеми необходимыми исключениями. Я обнаружил, что это было что-то гораздо более простое для меня. Если вы следуете стилю макета проекта Maven / src / main / java и /src / test/java, вам просто нужно поставить buildDir / classes/главная в своем classDirectories config вот так:

afterEvaluate {
    jacocoTestReport {
        def coverageSourceDirs = ['src/main/java']
        reports {
            xml.enabled false
            csv.enabled false
            html.destination "${buildDir}/reports/jacocoHtml"
        }
        sourceDirectories = files(coverageSourceDirs)
        classDirectories = fileTree(
                dir: "${project.buildDir}/classes/main",
                excludes: [
                      //whatever here like JavaConfig etc. in /src/main/java
                     ]
        )
    }
}

приведенный ниже код также исключает классы из проверки покрытия:

jacocoTestCoverageVerification {
    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: "${project.buildDir}/classes/main",
                    exclude: ['**/packagename/**'])
        })
    }
}

Comments

    Ничего не найдено.