使用 JaCoCo 从代码覆盖分析中排除单元测试
Exclude unit tests from code coverage analysis with JaCoCo
我在 Gradle 中使用 JaCoCo。有没有办法从测试代码的代码覆盖分析中排除一些单元测试? (请注意,我并不是说要从覆盖率报告中隐藏单元测试或某些 类,这在例如 中进行了讨论)。
我有一些测试是为了一种必要条件的一致性检查,换句话说,测试是弱;预计测试很可能以任何方式通过。如果它失败了,测试的代码肯定有某种类型的错误,但即使它通过了也不能保证代码是完全正确的(这应该由另一个 stronger 测试来检查, 考虑到代码覆盖率)。所以我当然想 运行 在 gradle test
中进行此单元测试,但不想将其包含在测试代码的代码覆盖率分析中。
您可以针对不同类型的测试使用不同的 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
的信息
我在 Gradle 中使用 JaCoCo。有没有办法从测试代码的代码覆盖分析中排除一些单元测试? (请注意,我并不是说要从覆盖率报告中隐藏单元测试或某些 类,这在例如
我有一些测试是为了一种必要条件的一致性检查,换句话说,测试是弱;预计测试很可能以任何方式通过。如果它失败了,测试的代码肯定有某种类型的错误,但即使它通过了也不能保证代码是完全正确的(这应该由另一个 stronger 测试来检查, 考虑到代码覆盖率)。所以我当然想 运行 在 gradle test
中进行此单元测试,但不想将其包含在测试代码的代码覆盖率分析中。
您可以针对不同类型的测试使用不同的 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