SuperAPI AI 工具集

eng-testing-anti-patterns

测试与质量

查看项目

更新于 10-16 06:29

技能介绍

用途

该技能面向编写或修改测试、添加 mock、或考虑加入仅测试用钩子的场景,用于防止常见测试反模式。其核心主张是:测试必须验证真实行为,而不是 mock 行为;mock 是隔离工具,永远不是被测对象。

主要能力

技能以“铁律”和“反模式”两条线索组织内容。

铁律包括:

  1. 绝不测试 mock 行为;
  2. 绝不向生产类添加仅测试用的方法;
  3. 绝不在不理解依赖的情况下 mock;
  4. 绝不交付不完整的 mock;
  5. 绝不把集成测试当作事后补充。

反模式部分逐条给出错误示例、错误原因、修复方式和判断门槛:

  • 反模式 1:测试 mock 行为。错误示例是在 mock <Sidebar/> 后断言 getByTestId('sidebar-mock') 存在。问题在于这只证明 mock 可用,对组件本身没有任何说明。修复方式是测试真实组件,或仅为隔离而 mock,但断言行为而非 mock 内部。门槛:在断言 mock 前先问“我是在测试真实行为还是只测试 mock?”如果是 mock,就删除断言或取消 mock。
  • 反模式 2:生产代码中的仅测试方法。错误示例是添加只在测试中使用的 Session.destroy()。问题在于污染生产 API,若被线上调用会很危险。修复方式是把清理辅助方法移到测试工具中,生产类只暴露真实生命周期。门槛:添加方法前问“这是否只用于测试?”以及“这个类是否拥有该生命周期?”若前者为“是”或后者为“否”,就停止。
  • 反模式 3:不理解就 mock。错误示例是 mock 一个同时会写配置的高层方法,导致重复检测失败。修复方式是只 mock 缓慢或外部部分(例如服务器启动),保留必要的副作用。门槛:mock 前回答:真实方法有哪些副作用?测试是否依赖它们?我是否完全理解依赖链?若不确定,先用真实实现运行、观察,再做最小化 mock。
  • 反模式 4:不完整的 mock。错误示例是 mock 响应只包含用到的字段,而下游需要 metadata.requestId。修复方式是镜像完整的真实 schema(status、data、metadata 等)。门槛:查看真实 API 或文档,包含消费者可能触及的每个字段;若不确定,复制完整结构。
  • 反模式 5:把集成测试当作事后补充。错误示例是“实现完成”却没有测试。修复方式是遵循 TDD:先写失败测试,再实现,后重构。

技能还提醒:如果 mock 设置比测试逻辑还复杂,应重新考虑是否需要 mock;使用真实组件的集成测试可能更简单。TDD 可以防止这些问题:先失败确保测试验证真实行为,防止仅测试用的生产代码,并揭示 mock 何时不必要。

使用方式

在编写或修改测试、添加 mock、或考虑加入仅测试用钩子时应用该技能。按反模式条目中的“门槛”问题自查,并参考快速参考表:断言 mock 时改为测试真实行为或取消 mock;仅测试方法移到测试工具;盲目 mock 先理解依赖;部分 mock 匹配真实 API schema;没有测试则走 TDD 循环。

适用场景

适用于单元测试、集成测试、mock 设计、测试与生产代码边界划分,以及采用 TDD 工作流的开发过程。

限制

资料未提供该技能的具体安装命令、支持平台、收费方式或效果数据,这些信息暂未提供。