Фильтр отчетов о покрытии 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?
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/**']) }) } }
для меня это нормально работать с
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