Appearance
代码覆盖率
本章介绍 Anvil 的代码覆盖率功能。
概述
Anvil 集成 gcov/lcov 工具链,支持收集和报告代码覆盖率数据。
工作原理
编译阶段 ─────────> 测试阶段 ─────────> 报告阶段
添加覆盖率标志 生成执行数据 收集并生成报告
-fprofile-arcs .gcda 文件 .info / HTML
-ftest-coverage快速开始
1. 启用覆盖率
bash
anvil --coverage2. 生成 HTML 报告
bash
anvil --coverage --coverage-format=html3. 查看报告
bash
open coverage/html/index.html命令行选项
| 选项 | 说明 | 默认值 |
|---|---|---|
--coverage | 启用覆盖率收集 | false |
--coverage-format | 输出格式 | lcov |
--coverage-dir | 输出目录 | coverage |
--coverage-exclude | 排除模式(逗号分隔) | - |
输出格式
| 格式 | 说明 | 输出文件 | 依赖工具 |
|---|---|---|---|
gcov | 原始 gcov 数据 | *.gcda | gcov |
lcov | lcov 格式 | coverage.info | lcov |
html | HTML 报告 | html/index.html | lcov + genhtml |
cobertura | Cobertura XML | coverage.xml | lcov_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 |
章节导航
- CI/CD 集成 - 在 CI 系统中使用覆盖率