三天变三小时 - 让AI给老项目补齐单元测试骨架的一次实操记录
一、先说痛点:老项目的测试债,独立开发者都懂
接手过一个跑了五年的项目的人都知道那种感觉:几千个函数,测试覆盖率不到15%,改一行代码心里都没底。想补测试?算一笔账就明白了:
- 一个中等复杂度的函数,手写一个测试骨架(mock 依赖、构造入参、断言结构)平均要 8~15 分钟
- 一个 300 个函数的老模块,全部补齐骨架,按 10 分钟/个算,就是 50 个小时,整整一周多
- 这还只是骨架,不算边界场景和真实断言
所以大多数独立开发者和小团队的选择是:不补。然后每次改代码都在祈祷。
真正让我下决心动手的,是上个月一次改坏的 bug——一个没人记得的老工具函数,输入为 null 时直接崩了。修复只花了 10 分钟,但排查加回归花了一晚上。测试债不是不还,只是换个更贵的方式还。
二、AI 能为这件事做什么:它最擅长的是“机械且重复”
写测试骨架这件事,恰好是 AI 的甜点区:
- 读代码、理解依赖:把函数源码丢给它,它能识别出哪些参数需要 mock、哪些是纯函数不需要 mock。
- 批量生成结构:正常路径、空值、边界值,一次生成 3~5 个测试用例的骨架,断言部分留 TODO 标记,人工再补关键逻辑。
- 保持风格统一:给它一两个现有测试做范例,它生成的骨架和项目原有测试风格一致,不像人手写那样每人一个味儿。
- 顺带做代码审查:AI 读函数时会顺便指出可疑点——比如没判空、魔法数字、死代码。我这次跑下来,一个 40 个函数的模块里它挑出了 4 个潜在 null 崩溃点。
需要说清楚的是:AI 生成的是骨架,不是可交付的完整测试。断言的具体期望值、业务边界,仍然需要人确认。但即便如此,它把每个函数的处理时间从 10 分钟压到了 2 分钟左右(生成 30 秒 + 人工审查修改 90 秒),这个数字才是重点。
三、我的实际流程
第一步:准备物料。 挑出目标函数列表,按模块分组;准备项目使用的测试框架信息(比如 pytest / JUnit / Jest)、一个现有测试文件做风格范例。
第二步:批量投喂。 我是一次给 10~20 个函数,超出这个量 AI 输出质量会下滑。用下面这个模板:
你是一名资深测试工程师。请为以下函数生成单元测试骨架。
【测试框架】:{{pytest / JUnit5 / Jest,按实际填写}}
【运行环境】:Python 3.11 / JDK 17 / Node 20
【风格范例】:
{{粘贴一个项目里已有的测试文件,200行以内}}
【待测函数】:
{{粘贴函数源码,含类型签名}}
要求:
1. 覆盖正常路径、空值/边界值、异常路径三类场景,每个场景一个测试函数
2. 需要外部依赖(数据库/网络/文件)时使用 mock,说明 mock 的对象
3. 断言处用 assert xxx == TODO_EXPECTED 占位,并加注释说明应填什么
4. 不确定的业务含义,用 # QUESTION: 开头的注释标出,不要猜
5. 只输出测试代码,不要解释其中第 4 条很关键——让 AI 承认自己不懂,而不是瞎编。早期我没加这条,它会给完全错误的期望值,反而增加了排查成本。
第三步:人工收口。 跑一遍生成的测试,骨架跑不通的修掉,填上关键断言。标了 QUESTION 的地方集中查文档确认。
第四步:接入 CI。 补完骨架的模块把覆盖率门槛写进流水线,防止新债。
四、前后对比:一笔时间账
以一个 300 个函数的老模块为例:
| 项目 | 纯手写 | AI 辅助 |
|---|---|---|
| 单函数平均耗时 | ~10 分钟 | ~2 分钟 |
| 300 函数总耗时 | ~50 小时 | ~10 小时 |
| 实际日历周期 | 2~3 周(没人能连着写) | 2~3 天 |
| 顺带产出 | 无 | 4 个潜在 bug 预警、一批死代码标记 |
从 50 小时压到 10 小时,节省约 80% 的时间,而且心理上完全不同——手写测试到第 20 个函数人就麻了,AI 不麻。质量上,骨架的可用率我抽检大约在 85% 左右,剩下 15% 主要是复杂 mock 场景需要手工调整。
成本方面,这个量级的调用消耗的 token 费用相对人力成本几乎可以忽略,具体以各模型官网价格页为准。如果走多模型网关,骨架生成这种任务用便宜的中档模型就足够,没必要上旗舰模型——这又是一笔可以省的开销。
五、几点经验
- 别让 AI 一次性生成全部测试,分批投喂质量更稳。
- 一定要给风格范例,否则生成的测试和你项目里的写法割裂,后期维护难受。
- 骨架 ≠ 完成,把 AI 的产出定位成“70% 的草稿”,人的 30% 审查不可省略。
- 优先补被频繁调用的核心函数,用调用频率排序,而不是从文件头扫到文件尾。
老项目的测试债没有魔法一键清零,但 AI 把还债的成本砍掉了八成——原来“根本没时间做”的事,现在变成了“一个下午就能推进一截”的事。这笔账,值得每个维护老项目的人算一算。
如果你还没有可用的模型账号,可以在这里注册一个开始实践:https://api.thistoken.ai/register
---
想直接跑通示例?访问 https://api.thistoken.ai/register 注册 ThisToken.AI,获取 API Key 后即可开始。