S3.6.2 Task 3.6

60% 重复测试建议因为没人给 Claude 看已有的测试

CI 流水线把 PR diff 和源文件发给 Claude 要测试建议。8 个建议中 5 个已经在测试套件中存在了。流水线没有把已有测试文件包含在上下文中。

看不到什么已经被测试了,Claude 只基于源代码生成测试。最显而易见的测试场景——任何称职的开发者首先会写的——恰恰是现有套件已经覆盖的。

修复:把已有测试作为上下文提供

方法重复率新颖边缘情况每建议审查时间
无已有测试在上下文中60%15%3 分钟
已有测试在上下文中8%65%1 分钟

上下文成本:每 PR 约 500 额外 token。回报:重复减少 87%,新颖边缘情况增加 4 倍,审查速度提升 67%。

当 Claude 能看到什么已经被测试了,它跳过已覆盖场景聚焦于真正的缺口——未覆盖的边缘情况、错误路径、边界条件。这不是去重引擎。Claude 只是读已有测试然后自然避免重复它们。

大型测试套件

500+ 测试跨 40 个文件的代码库不可能全部加载到上下文。方案:只提供和正在测试的模块相关的测试文件。

auth/permissions.ts 生成测试?包含 auth/permissions.test.ts 和任何共享测试工具。不要 API 测试、不要数据库测试、不要 UI 测试。定向上下文既充分又高效。

从代码库各处随机抽取的测试文件没有帮助——可能根本不包含 auth 测试。基于被测模块的定向选择才是正确策略。

工作流

  1. 提供已有测试 — 在上下文中包含模块的测试文件
  2. 提供源代码 — 包含被测函数或模块
  3. 请求缺口分析 — “为未覆盖的代码路径生成测试,避免已有测试中已覆盖的场景”

已有测试有双重用途:它们展示什么已被覆盖(避免重复),也展示团队的测试模式(保持测试风格、工具和规范的一致性)。

CI 流水线集成

每个 PR 的自动化测试缺口分析:

流水线步骤:
1. 识别变更的源文件
2. 找到对应的测试文件
3. 两者作为上下文传给 Claude
4. 请求未覆盖场景的测试建议

CLAUDE.md 可以描述测试规范和理念,但它不能防止重复测试内容。上下文中的实际测试文件才提供重复避免。

不存在的东西

  • --no-duplicates 标志 — 不是 Claude Code 特性。改在上下文中提供已有测试。
  • 内部去重引擎 — Claude 没有检测重复测试的特殊机制。它自然地使用上下文。
  • 自动检测已有测试 — 流水线必须显式包含测试文件。Claude 不会自动发现或读取它们除非它们在上下文中。

一句话总结: 请求新测试时在上下文中包含已有测试文件——重复从 60% 降到 8%,Claude 把精力重定向到 65% 真正新颖的边缘情况建议上。