mcpField
B
bazel-test-hygiene

bazel-test-hygiene

github.com/cloudflare测试与质量9.1k51 次安装今天更新
代码仓库

关于 bazel-test-hygiene

为 workerd 贡献者制定严格的 Bazel 测试规范,强调禁用结果缓存、避免用筛选标志运行单个用例、运行完整测试套件,并对回归测试进行红绿验证。

主要功能

  1. 01禁用测试结果缓存
  2. 02避免使用用例筛选标志
  3. 03运行完整测试套件
  4. 04执行回归测试红绿验证

适用场景

  1. 01获取最新的 Bazel 测试结果
  2. 02验证变更对整个测试套件的影响
  3. 03确认回归测试能检测出缺陷

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cloudflare/workerd --skill bazel-test-hygiene

安装后在 Claude Code 中输入/bazel-test-hygiene确认已加载。

详细介绍

Bazel 测试规范

三条规则

1. 始终禁用缓存
bazel test //... --nocache_test_results

原因: 即使你编辑了源文件,Bazel 的操作缓存仍可能提供过时的测试二进制文件。如果不加上 --nocache_test_results,你可能运行的是旧二进制文件,看到的也是旧结果。这并非假设——它曾在本仓库中导致真实的误报和漏报问题。

始终加上 --nocache_test_results。 不得例外。

2. 保持简单——不要使用筛选标志

不要使用 --test_arg='-f' 或类似的筛选标志来运行单个测试用例。

原因: KJ 测试的 -f 标志在没有匹配任何测试时会静默通过。如果筛选条件拼错,或者测试名称发生变化,bazel 会报告“PASSED”,但实际上没有运行任何测试。这会带来完全错误的信心。

运行完整的测试目标。 如果要检查某个特定测试,请在完整输出中查找它的名称。如果整个测试套件太慢,请运行特定的测试_目标_(例如 //src/workerd/api:streams/standard-test@),而不是在某个目标中筛选部分测试。

3. 宣布完成前运行完整测试套件

单个测试目标通过,并不意味着你没有破坏其他功能。对共享代码(queue.c++、standard.c++、common.h)的修复可能会导致完全不同目录中的测试失败。

宣布任何修复完成前:

bazel test //... --nocache_test_results

检查最终汇总行:Executed N out of N tests: N tests pass. 所有 N 都必须一致。如果有任何测试失败,修复就尚未完成。

回归测试的红绿验证

为修复 Bug 编写回归测试时,你必须验证该测试确实能捕获这个 Bug:

  1. 绿: 运行 bazel test //... --nocache_test_results——所有测试均通过(修复已生效)
  2. 红: 移除修复,运行 bazel test //... --nocache_test_results——新增的测试必须失败
  3. 绿: 恢复修复,运行 bazel test //... --nocache_test_results——所有测试再次通过

如果第 2 步通过了(移除修复后测试没有失败),说明测试并未按预期验证问题。请返回并修正测试。

对完整测试套件进行红绿验证,而不只是针对单个目标。这样可以同时发现两个问题:(a)回归测试确实能检测到 Bug;(b)修复不会破坏其他功能。

反面模式

不要应该这样做
bazel test //target(没有缓存标志)bazel test //target --nocache_test_results
--test_arg='-f' --test_arg='test name'运行完整目标,并在输出中搜索测试名称
只运行一个目标就宣布修复完成运行 //...,检查全部通过的汇总信息
根据之前某次运行宣称“测试通过”重新运行,并查看最新输出
直接相信基于筛选的“PASSED”检查输出中是否出现预期的测试名称

评论

支持 Markdown