JaCoCo Gradle-排除类并覆盖Includes

问题描述 投票:0回答:1

我正在尝试改善项目中的代码覆盖率,并希望排除任何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.*'和其他...有什么我要忽略的吗?

android unit-testing gradle jacoco jacoco-plugin
1个回答
0
投票

您可以使用filter on fileTree

例如]

filter

fileTree

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

使用Gradle 6.2.1将在目录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 ,但包含build/reports/jacoco/test/html/View

ViewModel

© www.soinside.com 2019 - 2024. All rights reserved.