用途
该技能用于在代码审查阶段检查测试代码,识别并修复常见的测试反模式,让测试真正能发现回归问题,而不是制造虚假的安全感。
主要能力
文档聚焦八类关键反模式:
- Liar(谎言测试):测试即使代码损坏也能通过,因为断言过于宽松,如只判断 toBeDefined。
- Giant(巨型测试):一个测试覆盖过多行为,包含大量断言,定位失败原因困难。
- Inspector(审查者测试):测试内部实现细节(如私有方法、具体排序算法),实现一变测试就碎,即使行为正确。
- Mockery(过度 Mock):几乎把所有依赖都 Mock 掉,测试实际只是在验证 Mock 的算术,毫无意义。
- Flaky Test(脆弱测试):随机通过或失败,常见原因有时间依赖、异步竞态、共享可变状态和外部依赖。
- Slow Poke(慢速测试):不必要的真实网络或 I/O 调用拖慢测试。
- Chain Gang(链式测试):测试之间通过共享状态相互依赖,必须按顺序运行。
- Secret Catcher(隐秘测试):断言藏在辅助函数或 setup 中,阅读时看不清到底测了什么。
每类反模式都配有坏代码和好代码的对照示例,示例使用 JavaScript/TypeScript 与 Jest 风格。
使用方式
文档建议的审查流程为:先单独运行测试,确认每个测试可独立通过、无共享状态和顺序依赖;然后逐条对照反模式清单扫描并标记;再根据重构策略选择合适的修复方式;最后在修复后确认当实现被破坏时测试确实会失败,以验证测试能捕获真实回归。
检测清单包括:没有有效断言的测试、断言超过 5 到 7 个的测试、Mock 一切的测试、访问私有方法或属性的测试、包含 sleep/wait 的测试、依赖执行顺序的测试,以及 setup 复杂到掩盖意图的测试。
重构策略对应为:断言过多则拆分为多个测试;过度 Mock 则改用真实实现或伪对象;脆弱测试则控制时间并 Mock 外部调用;慢测试则 Mock I/O 并并行化独立测试;隐藏逻辑则内联或清晰命名辅助函数。
适用场景
适用于使用 Jest 等 JavaScript/TypeScript 测试框架的项目,在编写测试、代码审查和测试重构阶段使用,帮助团队统一测试质量标准。文档建议的目标是单元测试小于 100ms、集成测试小于 1s。
限制
该资料未说明自身是否收费、安装命令、支持的具体平台或版本要求,这些信息暂未提供。文档内容以 JavaScript/TypeScript 示例为主,其他语言的适用性暂未提供。