JaCoCo代码覆盖率集成指南

将代码覆盖率检测与JaCoCo集成到项目中的步骤如下:

1. 添加JaCoCo插件

根据项目构建工具选择配置:

Maven项目 (pom.xml)
<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.7</version>
            <executions>
                <!-- 准备代理,收集覆盖率数据 -->
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <!-- 生成报告 -->
                <execution>
                    <id>report</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
                <!-- 检查覆盖率阈值 -->
                <execution>
                    <id>check-coverage</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>check</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <rule>
                                <element>BUNDLE</element>
                                <limits>
                                    <limit>
                                        <counter>LINE</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>0.80</minimum>
                                    </limit>
                                </limits>
                            </rule>
                        </rules>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
Gradle项目 (build.gradle)
plugins {
    id 'jacoco'
}

jacoco {
    toolVersion = "0.8.7"
}

test {
    finalizedBy jacocoTestReport
}

jacocoTestReport {
    reports {
        html.required = true
        xml.required = false
        csv.required = false
    }
    // 排除不需要检测的类
    afterEvaluate {
        classDirectories.setFrom(files(classDirectories.files.collect {
            fileTree(dir: it, exclude: [
                'com/example/generated/**'
            ])
        }))
    }
}

jacocoTestCoverageVerification {
    violationRules {
        rule {
            limit {
                minimum = 0.8
                counter = 'LINE'
            }
        }
    }
}

check.dependsOn jacocoTestCoverageVerification

2. 运行测试并生成报告

  • Maven:

    mvn clean test       # 生成覆盖率数据
    mvn jacoco:report    # 生成HTML报告(位于target/site/jacoco)
    mvn verify           # 检查覆盖率阈值
    
  • Gradle:

    gradle test jacocoTestReport      # 生成报告(位于build/reports/jacoco)
    gradle check                      # 检查覆盖率是否达标
    

3. 查看覆盖率报告

生成的HTML报告包含详细的覆盖率信息:

  • 行覆盖率:代码行被测试执行的比例。
  • 分支覆盖率:条件语句(如if/else)的分支覆盖情况。
  • 方法覆盖率:类中方法的覆盖情况。

4. 配置排除文件

排除不需要检测的类或目录:

  • Maven:

    <configuration>
        <excludes>
            <exclude>**/generated/**/*</exclude>
        </excludes>
    </configuration>
    
  • Gradle:
    jacocoTestReport任务中使用afterEvaluate块(如上示例)。

5. 多模块项目处理

  • Maven聚合报告
    在父模块的pom.xml中添加:

    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.7</version>
        <executions>
            <execution>
                <id>report-aggregate</id>
                <phase>verify</phase>
                <goals>
                    <goal>report-aggregate</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    

    运行mvn verify后,报告在target/site/jacoco-aggregate

  • Gradle多项目
    在根项目的build.gradle中配置:

    subprojects {
        apply plugin: 'jacoco'
    }
    
    task jacocoRootReport(type: JacocoReport) {
        dependsOn subprojects.test
        additionalSourceDirs.setFrom files(subprojects.sourceSets.main.allSource.srcDirs)
        classDirectories.setFrom files(subprojects.sourceSets.main.output)
        executionData.setFrom files(subprojects.jacocoTestReport.executionData)
        reports {
            html.required = true
            xml.required = false
        }
    }
    

6. 集成到CI/CD

在持续集成流程(如Jenkins、GitHub Actions)中执行命令,确保每次构建都检查覆盖率:

  • 示例GitHub Actions步骤:
    - name: Build with Maven
      run: mvn verify
    

常见问题

  • 报告未生成:检查插件配置是否正确,测试是否执行。
  • 阈值不生效:确保check目标绑定到正确生命周期阶段(如Maven的verify)。
  • Java版本兼容性:使用最新JaCoCo版本以支持高版本Java。

通过以上步骤,即可成功集成JaCoCo并监控项目的代码覆盖率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值