Problema:
Eu tenho um projeto com Jacoco e eu quero ser capaz de filtrar certas classes e / ou pacotes.
Documentação relacionada:
Eu li a seguinte documentação:
Oficial Jacocosite: http://www.eclemma.org/jacoco/index.html
Oficial Jacoco docs para gradle: https://gradle.org/docs/current/userguide/jacoco_plugin.html
Oficial Jacoco Github
questões, trabalhando na cobertura:
https://github.com/jacoco/jacoco/wiki/FilteringOptions
https://github.com/jacoco/jacoco/issues/14
Links StackOverflow relacionados:
JaCoCo & Gradle - Opções de filtragem (sem resposta)
Excluir pacotes do relatório Jacoco usando Sonarrunner e Gradle (não usandosonar)
JaCoCo - excluir JSP do relatório (parece funcionar paramaven, Estou usando gradle)
Configuração Maven Jacoco - Excluir classes / pacotes do relatório que não funcionam (parece funcionar paramaven, Estou usando gradle)
Exclusão do plugin JaCoCo gradle (não foi possível fazer isso funcionar)
Gradle Jacoco - relatórios de cobertura incluem classes excluídas na configuração (parece muito próximo, usou doFirst
, não funcionou para mim)
Exemplo do que tentei:
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"]
}
}
}
Questão:
Como posso excluir certos pacotes e classes ao gerar o Jacoco relatórios de cobertura?
fonte
packages
online usandoCodecov
? Além disso, eu vi oGithub
, o que dizer deAndroid
apoio, eu viJava
. Ainda devo enviar a você todos os relatórios e, em seguida, filtrar após vs filtrar antes.excludes
documentação oficial realmente faz então? É praticamente inútil?excludes
não está na tarefa de cobertura, mas na tarefa de teste. Exclui os arquivos da instrumentação da JaCoCo e, portanto, da gravação da cobertura. Você pode usar isto se não quiser gravar cobertura para algumas classes, se não puder por causa de algum conflito com outro agente de instrumentação ou porque você pré-instrumentou classes. Isso não excluirá uma turma do relatório, principalmente no último caso mencionado, seria uma ideia horrível.Respostas:
Graças a
Yannick Welsch
:Depois de pesquisar no Google, ler os documentos do Gradle e passar por postagens mais antigas do StackOverflow, encontrei esta resposta gradle fóruns!
Fonte: https://issues.gradle.org/browse/GRADLE-2955
Solução para meus
build.gradle
projetos Java / Groovy:Como você pode ver, fui capaz de adicionar mais
exclude:
para filtrar alguns pacotes.Fonte: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle
Tarefas personalizadas para outros projetos, como Android:
Fonte: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59
fonte
exclude: ['**/*Test*.*'])
jacocoTestReport
só funciona com plugjacoco
-java
ins e . Isso não é para Android. Consulte meu repositórioclassDirectories =
resultados neste aviso.The JacocoReportBase.setClassDirectories(FileCollection) method has been deprecated. This is scheduled to be removed in Gradle 6.0. Use getClassDirectories().from(...)
. Seria ótimo mostrar uma solução compatível com Gradle 6.0.Para o Gradle versão 5.x, o
classDirectories = files(...)
fornece um aviso de suspensão de uso e não funciona a partir do Gradle 6.0. Esta é a forma não obsoleta de excluir classes:fonte
[]
depoisexclude:
para incluir vários caminhos.para mim, tudo bem trabalhar com
conforme declarado na documentação https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 e inicialmente perguntado, então a resposta é:
então se você me perguntar: não é uma questão de
ou
mas
excluir um pacote
*.projecteuler.*
e
test {}
no nível do projeto, não aninhado emjacocoTestReport
fonte
Para Gradle6 use algo como abaixo, porque eles fizeram
classDirectories as final
, não podemos reatribuí-lo, mas existe um método setterclassDirectories.setFrom
que pode ser utilizadofonte
Aqui está uma solução para esse problema na ANT. Isso pode ser adaptado ao gradle adicionando o seguinte na
jacocoTestReport
tarefa. Embora isso não seja realmente documentado pelo jacoco, parece ser a única maneira de filtrar os resultados do teste por enquanto.fonte
generated/java/
vez demain/java
.Isso já foi divulgado por um tempo, mas acabei de encontrar isso. Eu estava lutando com todas as exclusões necessárias. Achei que era algo muito mais simples para mim. Se você seguir o estilo de layout do projeto Maven / src / main / java e / src / test / java, você simplesmente precisa colocar buildDir / classes / main em sua configuração classDirectories assim:
fonte
O código abaixo também exclui classes da verificação de cobertura:
fonte
alguns comentários mencionaram o aviso de suspensão de uso. para resolver basta usar o getter:
fonte
Para filtrar no relatório jacoco, a exclusão precisa ser feita em duas tarefas
jacocoTestReport
ejacocoTestCoverageVerification
.Código de amostra
fonte
adicione a configuração abaixo no arquivo gradle.properties
coverageExcludeClasses=["com.example.package.elasticsearch.*", "com.example.package2.*",]
fonte
coverageExcludeClasses
não parece ser uma coisa em JaCoCo / Gradle