如何配置Bazel生成包含未测试源码的完整覆盖率报告?
如何让Bazel生成包含未测试源文件的完整覆盖率报告
Bazel 默认仅统计测试用例实际触及的源文件覆盖率,未被测试依赖的文件不会出现在报告中。要包含这些未测试文件(显示0%覆盖率),可以通过以下两种方式配置:
1. 直接在命令行指定 instrumentation 范围
使用 --instrumentation_filter 参数强制覆盖所有需要统计的源文件路径,确保所有目标文件都被插桩。
示例命令:
bazel clean && bazel coverage --combined_report=lcov --instrumentation_filter="//src/..." -- //src/...:all
这里的 //src/... 要匹配你项目中所有源文件的根路径,确保所有需要统计的文件都被包含进来。
2. 通过 .bazelrc 全局配置
如果需要重复使用该配置,可以在项目根目录的 .bazelrc 文件中添加预设:
build:coverage --instrumentation_filter="//src/..." build:coverage --combined_report=lcov
之后只需执行简化命令:
bazel clean && bazel coverage --config=coverage //src/...:all
关键原理说明
Bazel 的覆盖率工具默认仅对测试目标直接或间接依赖的源文件进行插桩和统计。通过 --instrumentation_filter 可以打破这个限制,强制指定插桩范围,让未被测试覆盖的文件也能生成覆盖率数据(全部为0%)。
注意事项
- 调整
instrumentation_filter的路径时,避免包含第三方依赖或不需要统计的文件,否则报告会冗余。 - 不同语言的覆盖率工具(如C++的gcov、Java的JaCoCo)均支持该配置,无需额外调整语言特定参数。
内容的提问来源于stack exchange,提问作者Dragan R.
相关产品推荐
相关产品推荐

