Skip to content

代码覆盖率

本章介绍 Anvil 的代码覆盖率功能。

概述

Anvil 集成 gcov/lcov 工具链,支持收集和报告代码覆盖率数据。

工作原理

编译阶段 ─────────> 测试阶段 ─────────> 报告阶段
添加覆盖率标志       生成执行数据         收集并生成报告
-fprofile-arcs       .gcda 文件           .info / HTML
-ftest-coverage

快速开始

1. 启用覆盖率

bash
anvil --coverage

2. 生成 HTML 报告

bash
anvil --coverage --coverage-format=html

3. 查看报告

bash
open coverage/html/index.html

命令行选项

选项说明默认值
--coverage启用覆盖率收集false
--coverage-format输出格式lcov
--coverage-dir输出目录coverage
--coverage-exclude排除模式(逗号分隔)-

输出格式

格式说明输出文件依赖工具
gcov原始 gcov 数据*.gcdagcov
lcovlcov 格式coverage.infolcov
htmlHTML 报告html/index.htmllcov + genhtml
coberturaCobertura XMLcoverage.xmllcov_cobertura

生成的文件

文件类型生成时机说明
.gcno编译时基本块和行号信息(静态)
.gcda测试执行时执行计数器数据(动态)
.info报告生成时lcov 格式的覆盖率数据
*.html报告生成时HTML 可视化报告

配置文件

yaml
coverage:
  enabled: true
  format: html
  output_dir: coverage
  exclude_patterns:
    - "*/tests/*"
    - "*/mocks/*"
    - "*/anvil-mocks/*"

完整工作流

bash
# 1. 用覆盖率标志构建项目
make clean
COVERAGE=1 make

# 2. 运行测试并收集覆盖率
anvil --coverage --coverage-format=html

# 3. 查看报告
open coverage/html/index.html

排除文件

排除测试代码和 Mock 文件:

bash
anvil --coverage --coverage-exclude="*/tests/*,*/mocks/*"

配置文件方式:

yaml
coverage:
  exclude_patterns:
    - "*/tests/*"
    - "*/mocks/*"
    - "*/third_party/*"

外部工具依赖

工具必需性用途安装方式
gcc必需编译器系统自带
gcov必需基础覆盖率处理随 gcc 安装
lcov可选覆盖率数据合并apt install lcov
genhtml可选HTML 报告生成随 lcov 安装
lcov_cobertura可选Cobertura 转换pip install lcov_cobertura

章节导航

本页面内容遵循 Luna 软件源代码授权条款 (LSLA) 发布