用途:这是一套通用的测试编写纪律,用于指导编写测试、补充测试覆盖,以及修复缺陷时建立回归测试。核心原则是测试必须能证明行为有效,无法失败的测试没有价值,只验证 mock 而非真实代码的测试是表演。
主要能力:要求每个测试只验证一个行为,测试名需带“and”就应拆分;测试用例需从三个独立来源推导并逐一映射——用户需求、实际实现的功能、回复中声称可用的行为,任何来源出现但无对应测试即为覆盖缺口。主张测试中 DAMP 优于 DRY,允许重复以保持可读性。给出测试金字塔比例参考:约 80% 单元、15% 集成、5% E2E,并可按项目风险调整。测试命名应描述预期行为而非被调用函数。尽量使用真实对象,mock 仅用于系统边界(外部 HTTP API、支付网关、邮件短信、限流第三方 SDK);框架自带的测试替身(如 Laravel 的 Queue::fake()、Event::fake(),React 的测试 provider 与 vi.mock)属惯用做法,可以使用。断言应针对结果而非实现细节,并覆盖空值、边界值、错误类型、并发、错误路径、Unicode 等边界情况。
使用方式:缺陷修复采用“证明”模式——先写复现缺陷的测试并运行确认其因正确原因失败,再修复代码并运行确认通过且其他测试仍通过;若测试未修复即通过,说明它验证的是既有行为而非缺陷。新功能建议边写边测。绿灯阶段只写满足测试的最简代码,通过后再重构。
适用场景与限制:适用于 API、Web、CLI、数据管道等各类项目的测试编写。文中列出常见反模式:测试 mock 行为、生产代码中出现仅测试用的方法、仅依赖快照测试、测试框架本身、mock 不完整、未理解就 mock。并给出卡住时的应对与合理化对照表(如“太简单不用测”“我手动测过了”“以后再加测试”等)。完成前需核对清单:每个新公开函数或端点至少一个测试、测试名描述行为、尽量用真实对象、覆盖边界、断言结果、测试相互独立、单元测试套件运行快(小于 30 秒)、缺陷修复测试能复现原缺陷。该技能被 workflows:work、debugging、verification-before-completion 引用;框架特定模式由 php-laravel、react-frontend 等技能补充,两者同时启用时框架特定指导优先。