JaCoCo Gradle - 排除类和覆盖包含方式

3

我正尝试完善我的项目代码覆盖率,并希望排除任何View类(因为它们无法进行测试),但包括任何ViewModel类... 但是我似乎无法让通配符过滤器合作,要么全部包括,要么全部排除!


def excludedPatterns = [
        //... other stuff

        '**/*Fragment*.*',
        '**/*Activity*.*',
        '**/*Adapter*.*',

        '**/*View*.*', // <-- this line is excluding classes ending w/ ViewModel

        '**/*ViewState*.*',
        '**/*ViewHolder*.*',
]

task codeCoverageReport(type: JacocoReport, dependsOn: 'testDebugUnitTest') {
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."

    reports {
        html.enabled true
    }

    def debugTree = fileTree(
            dir: "$project.buildDir/tmp/kotlin-classes/debug",
            excludes: excludedPatterns
    )
    classDirectories.from = files([debugTree])

    def mainSrc = "$project.projectDir/src/main/java"
    sourceDirectories.from = files([mainSrc])

    executionData.from = fileTree(dir: project.buildDir, includes: [
            'jacoco/testDebugUnitTest.exec',
            'outputs/code-coverage/connected/*coverage.ec'
    ])
}

我尝试了几种不同的**/*View*.*的变化形式,包括**/*View.*等……有什么我忽略的东西吗?
1个回答

4
你可以使用 filterfileTree 上。
例如,对于: src/main/java/View.java
class View {}

src/main/java/ViewModel.java

class ViewModel {}

src/main/java/Example.java

class Example {}

src/test/java/ExampleTest.java

import org.junit.Test;

public class ExampleTest {
    @Test
    public final void test() {
    }
}

以及 build.gradle

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

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'junit:junit:4.13'
}

jacocoTestReport {
    classDirectories.setFrom(
        fileTree(dir: "build/classes/java/main")
            .filter({file -> !file.name.contains('View') || file.name.contains('ViewModel')})
    )
}

执行

gradle clean test jacocoTestReport

使用Gradle 6.2.1将在目录build/reports/jacoco/test/html/生成以下报告,该目录不包含View,但包含ViewModelExample。如下图所示:

report


谢谢!我将要测试这个,如果它有效的话会回来汇报并接受答案。 - jesses.co.tt
这个应该放在根目录的 Gradle 还是 app/ 目录下的 Gradle?另外,我现在卡在了 Gradle 5.X,这是一个只有 6.X 才有的功能吗? - jesses.co.tt
nv,我想到了。使用属性语法,我能够简单地执行以下操作:classDirectories.from = files([debugTree]).filter({file -> file.name.contains('ViewModel')}) - jesses.co.tt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接