使用JaCoCo从代码覆盖率分析中排除单元测试

时间:2020-02-28 10:52:53

标签: gradle jacoco

我将JaCoCo与Gradle一起使用。有什么方法可以从测试代码的代码覆盖率分析中排除某些单元测试? (请注意,我并不是要在覆盖率报告中隐藏单元测试或某些类,例如在Filter JaCoCo coverage reports with Gradle中进行了讨论。)

我有一些测试,用于对必要条件进行一致性检查,换句话说,测试是 weak ;该测试有望以任何方式通过。如果未通过测试,则代码肯定存在某种类型的错误,但是即使通过,也不能保证代码是完全正确的(这应该由另一个 strong 测试进行检查,即考虑到代码覆盖率)。因此,毫无疑问,我想在gradle test中运行此单元测试,但不希望将其包含在测试代码的代码覆盖率分析中。

1 个答案:

答案 0 :(得分:1)

您可以对不同类型的测试使用不同的Gradle任务。例如

src/main/java/Example.java

class Example {
    void weak() {
        System.out.println("weak");
    }

    void strong() {
        System.out.println("strong");
    }
}

src/test/java/StrongTest.java

import org.junit.Test;

public class StrongTest {
    @Test
    public final void test() {
        new Example().strong();
    }
}

src/test/java/WeakTest.java

import org.junit.Test;

public class WeakTest {
    @Test
    public void test() {
        new Example().weak();
    }
}

最后是build.gradle

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

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'junit:junit:4.13'
}

test {
    exclude 'WeakTest.class'
}

task weakTest(type: Test) {
    include 'WeakTest.class'
}

check.dependsOn weakTest

默认的test任务将执行除WeakTest以外的所有内容,并将使用JaCoCo将执行信息收集到build/jacoco/test.exec中。

自定义weakTest任务将仅执行WeakTest,并将使用JaCoCo将执行信息收集到build/jacoco/weakTest.exec中。

默认jacocoTestReport将使用build/jacoco/test.exec中的信息来生成HTML报告。

这样执行

gradle clean build jacocoTestReport

使用Gradle 6.2.1将在目录build/reports/jacoco/test/html/中生成以下报告,该报告不包含有关WeakTest执行的信息

report