用 AI 为遗留代码自动生成单元测试:从零到上线实战
为什么遗留代码最适合先做单元测试
遗留代码最大的痛点通常不是“没有功能”,而是“没人敢改”。逻辑分散、依赖复杂、缺少文档,导致每次重构都像拆炸弹。AI 很适合在这个阶段帮你快速补测试,因为它擅长从现有代码中识别输入、输出、边界条件和潜在副作用,先把最危险的地方保护起来,再逐步推进重构。
但要记住,AI 不是替你“理解业务”的魔法按钮。正确做法是:用 AI 提升产出速度,同时保留工程师对测试意图、断言质量和边界覆盖的最终判断。
第一步:先选一个最值得下手的文件
不要一上来就让 AI 给整个仓库补测试。先找一个“高风险、低耦合、可验证”的目标文件,例如订单计算、日期处理、权限判断、字符串解析这类纯逻辑模块。判断标准很简单:
- 函数输入输出明确
- 依赖外部系统少
- 手工跑起来能看出预期结果
- 历史上经常被改动或出过 bug
你可以先把目标文件连同相关依赖片段贴给 AI,要求它先总结业务规则,再生成测试,而不是直接写代码。这样更容易暴露 AI 对上下文的误解。
第二步:让 AI 先读代码,再写测试计划
高质量提示词的关键不是“生成测试”,而是“先分析,再计划,再实现”。你可以这样要求 AI:
- 总结该模块的核心职责
- 列出可测试的函数和分支
- 区分正常路径、异常路径和边界值
- 指出需要 mock 的依赖
这一步的价值在于把模糊需求变成测试清单。对于遗留代码,很多问题不是测试写不出来,而是你根本不知道应该测什么。AI 很擅长把散乱代码整理成结构化的测试目标。
第三步:用 59API 接入你熟悉的开发工具链
如果你已经在用 Claude Code、Codex 或任何 OpenAI SDK,接入 AI 来生成测试并不复杂。59API 提供与这些工具兼容的 API 入口,基础地址是 https://api.59api.com。这意味着你不需要为了补测试额外改造工作流,可以直接在现有编辑器、脚本或 CI 辅助工具里调用模型。
对团队来说,59API 的优势很实际:按量付费、成本低、可直接使用 Claude 和 GPT 系列官方质量模型,不需要接受“降配版”输出。对于遗留项目这种需要反复试错、迭代提示词、重新生成测试的场景,低成本非常重要,因为你会频繁调用模型来修正断言和补边界用例。再加上推荐返利机制,长期跑测试生成和维护时,成本会更友好。
第四步:让 AI 生成第一版测试代码
当你拿到测试计划后,再让 AI 生成具体测试。建议明确测试框架、语言和风格,例如 Jest、PyTest、JUnit、Vitest 或 Go test。提示词里最好包含这些约束:
- 只使用当前项目已有的测试框架
- 保持命名风格与仓库一致
- 优先写可读性高的测试,不要追求花哨技巧
- 所有外部依赖都要 mock
第一版代码通常不会直接可用,常见问题包括:路径导入错误、mock 方式不匹配、断言过宽或过窄、测试数据不符合真实业务。不要急着人工重写,先让 AI 根据报错迭代修正,效率通常更高。
第五步:用失败测试反推边界条件
遗留代码最有价值的地方是隐藏边界。你可以故意让 AI 补一些“应该失败”的测试,例如空值、超长字符串、时区切换、重复提交、非法状态迁移。这样做有两个好处:
- 帮助你发现当前逻辑没覆盖的异常分支
- 为后续重构建立安全网
如果测试结果与预期不一致,不一定是测试错了,也可能是代码里的真实业务规则和你想象的不一样。此时要回到代码和产品规则,确认“应该如何表现”,再让 AI 调整断言。
第六步:把生成测试纳入 CI
当测试逐步稳定后,把它们接入 CI,作为每次提交的门禁。对于老项目,建议先从只读的验证开始,再慢慢提高门槛,例如:
- 先保证新生成测试可稳定通过
- 再要求关键模块覆盖率不下降
- 最后把核心路径纳入阻断式检查
如果你正在批量为多个模块补测试,59API 的低成本和兼容性会很有帮助:你可以在 CI 辅助脚本、内部工具或开发者工作台中按需调用,持续优化测试,而不是因为成本过高而停止迭代。
一个可执行的落地流程
最推荐的路径是:先选一个纯逻辑文件,先让 AI 总结业务规则,再生成测试计划,然后生成测试代码,修正报错,补边界案例,最后接入 CI。整个过程不需要一次做完,但每一步都应该留下可验证的成果。
如果你正在维护老系统,想用更低成本的方式把 AI 接入测试工作流,可以试试 59API。注册后用你现有的 Claude Code、Codex 或 OpenAI SDK 直接开始,先从一个文件的测试生成做起,很快就能看到收益。
真正有效的 AI 测试生成,不是替代工程师,而是让工程师更快建立可维护性。
¿Listo para empezar?
Conecta Claude y GPT en minutos a los precios más bajos, sin recortes. Regístrate para obtener tu clave API.
Registro gratis