用途:该技能为在开发过程中运行 Bazel 测试提供强制规则,需在执行任何 bazel test 命令前加载,尤其适用于验证修复或编写回归测试时。
主要能力与规则:
- 始终禁用缓存:运行 bazel test //... --nocache_test_results。原因是 Bazel 的动作缓存可能在源码修改后仍返回旧的测试二进制,导致看到旧结果,产生假阳性或假阴性。
- 保持简单,不使用过滤参数:不要使用 --test_arg='-f' 等过滤标志运行单个测试用例。原因是 KJ 测试的 -f 标志在零个测试匹配时会静默通过,若过滤词拼错或测试名变更,Bazel 会报告 PASSED 但实际未运行任何测试。应运行完整测试目标,如需检查特定测试,在完整输出中查找其名称;若完整套件太慢,运行特定测试目标(如 //src/workerd/api:streams/standard-test@),而非目标内的过滤子集。
- 声称完成前运行完整套件:单个测试目标通过不代表没有破坏其他内容,对共享代码(queue.c++、standard.c++、common.h)的修复可能破坏其他目录的测试。声称修复完成前运行 bazel test //... --nocache_test_results,检查最终摘要行 Executed N out of N tests: N tests pass,所有 N 必须匹配。
回归测试的红绿验证:为缺陷修复编写回归测试时,必须验证测试确实能捕获缺陷。绿:运行 bazel test //... --nocache_test_results,全部通过;红:移除修复,再次运行,新测试必须失败;绿:恢复修复,再次运行,全部通过。若第二步通过,说明测试未测到预期内容,需修正测试。红绿验证应在完整套件上进行,而非仅单个目标。
反模式:不要运行不带缓存标志的 bazel test //target;不要用 --test_arg='-f' 过滤;不要只运行一个目标就声称修复完成;不要依据之前的运行结果声称测试通过;不要轻信基于过滤的 PASSED。
限制:资料未提供该技能的安装方式、平台支持、收费或价格信息。