test-guard 用于在测试代码交付前审查新写、修改、生成或评审中的测试。它适用于任意语言,当编码代理刚写完测试函数或测试文件、正在编辑既有测试、评审含测试改动的 diff,或被要求编写/添加/评审测试时激活。
使用前先适配项目:查看项目自身的代理指令(CLAUDE.md、AGENTS.md)与测试文档,项目专属测试规则冲突时优先;识别测试栈后读取对应参考(pytest 读 references/pytest.md,PHPUnit/Pest/WordPress 读 references/phpunit.md,Jest/Vitest 读 references/jest.md),若项目调用 LLM API、使用代理框架或接入可观测性/遥测,还应读 references/llm-app-testing.md;并梳理系统边界(网络、数据库、文件系统、时钟与随机性、第三方 SDK、LLM API)。
评审流程:阅读 diff、新文件或被修改部分;逐条对照九条规则;按“规则编号、位置、违规原因、修复建议”简洁报告,按文件分组,无违规的文件不提。若用户在写测试前显式调用该技能,应在编写时即应用规则。
九条规则:1) 测行为而非实现,断言返回值与可观察副作用,不断言内部辅助函数被调用;2) 每个 mock 都需有理由,只在系统边界打桩,不断言 mock 收到特定参数;3) 每个测试一个场景,仅输入输出不同的用例合并为数据驱动测试(@pytest.mark.parametrize、PHPUnit #[DataProvider]、Jest test.each),不同 setup/断言/mock 配置或不同场景才拆分;4) 每个测试须说明其存在价值,写新测试前自问“它能捕获本套件其他测试捕获不到的哪个具体 bug”,无法回答则不写;5) 命名按 test_<scenario>_<expected_outcome>,读起来像需求;6) 复现真实生产 bug 的回归测试神圣不可删,须在名称或注释中引用事件(日期、issue ID 或简述);7) 不测框架保证的能力,只测项目自身逻辑;8) 状态与值对象必须构造真实实例、绝不打桩,以暴露字段名拼写和校验错误;9) 当数据库查询、schema 行为或持久化逻辑是被测对象时,需在带真实迁移的真实测试数据库上运行。
严重度:规则 1、2、8 必须修复(隐藏真实 bug 或使测试脆弱);规则 3、4、5、7 应当修复(导致臃肿与维护负担);规则 6 神圣不可删;规则 9 值得指出但不阻塞小改动。
限制:该技能不运行测试、不强制代码风格、不决定测什么(只决定怎么测),除非被要求审计,否则不标记未触碰文件中的既有违规。