用途:提升 Bazel C++ 测试目标或源文件的测试覆盖率。输入可以是 Bazel 测试目标(以 // 开头,如 //src/v/bytes/tests:iobuf_test),直接使用;也可以是源文件路径(如 src/v/bytes/iobuf.cc),需先用 bazel query 查找对应测试目标,若匹配多个则选最近的 tests/ 目录,无匹配则停止并告知用户。
工作流:
- 基线覆盖率:运行 tools/run-cov <target> -r llm,记录总行覆盖率基线,识别未覆盖函数、部分覆盖函数中的未覆盖分支及零覆盖文件。
- 理解代码:阅读报告中源文件与现有测试文件,关注未覆盖函数的输入与前置条件,沿用现有测试模式。redpanda_cc_gtest 使用 GTest(TEST()、TEST_F()),redpanda_cc_btest 使用 Seastar Boost test(SEASTAR_THREAD_TEST_CASE);ss::future<> 协程用 SEASTAR_THREAD_TEST_CASE 或 Seastar GTest runner 测试;Seastar 类型加 ss 命名空间前缀;多数检查用 EXPECT_,仅在继续会崩溃时用 ASSERT_。
- 编写测试:优先覆盖未覆盖函数、未覆盖错误路径,零覆盖文件可加冒烟测试;加入现有测试文件,不新建文件或 BUILD 目标(除非必要);遵循既有命名约定,每个用例一个逻辑行为,优先确定性测试,不添加复述代码的注释。
- 验证构建:bazel build <target>,先修复编译错误。
- 验证覆盖率:重跑 tools/run-cov <target> -r llm,对比基线,报告覆盖率 X.Y% → A.B%(+N.N%)及新增覆盖行数;若未提升,排查构建错误、预处理条件编译、模板实例化未触发等原因。
- 总结:说明新覆盖的函数与路径、新增测试用例、前后覆盖率数字及剩余缺口建议。
限制:仅面向 Bazel C++ 测试目标与源文件;需已有 tools/run-cov 脚本与对应测试环境;不编造具体覆盖率数字或结果。