我把代码测试这件事交给 AI 了三个月,说说什么变了

三个月前我做了一个小实验:把写单元测试这件事,尽量交给 AI 来做。

起因很普通。我们项目有一批旧代码,测试覆盖率不到 30%,没人想碰。技术债单子上挂了一年多,每次 code review 都说”下次补”,然后就没有下次。我当时想,反正写测试这事本来就枯燥,不如让 AI 来受这个苦。

三个月下来,代码测试覆盖率从 28% 到了 71%。但更有意思的不是这个数字,而是中间发生的那些事。


开始之前的预期

我以为 AI 写测试会是这样的流程:把函数粘进去,说”帮我写单元测试”,拿到覆盖率数字就完事。

实际大概对了一半。

AI 确实能快速生成基础用例,一个中等复杂度的函数,三分钟内能给出覆盖主干路径的测试。之前我自己写同样的东西,大概要二十分钟——不是因为难,而是懒得动笔,总想着”等下再写”。

但”等下”通常意味着永不。

AI 最大的价值,其实不是它写得有多好,而是它帮你越过了那道”开始”的门槛。


三个月里发现的几件事

正面情况先说。

最有效的场景是工具函数和纯业务逻辑。一个入参明确、出参固定的函数,AI 给出的测试用例质量很高,边界值覆盖、异常路径、空值处理基本都会想到。有几次它给出的边界测试直接发现了生产代码里的 bug,那种感觉挺奇妙——我没有刻意去找 bug,bug 是测试自动浮出来的。

另一个出乎意料的地方:AI 写测试时会反过来让我重新审视代码结构。有一次它说”这个函数很难写独立测试,因为依赖了太多外部状态”——这句话比 code review 里任何人说的都直接。我去看了那段代码,确实是三年前写的一坨混合了数据库操作和业务逻辑的缝合怪。拆开之后,测试好写了,主代码也干净了。

负面情况也不少。

AI 最容易出问题的场景是:它不了解你的业务上下文。

举个例子。我们有一个折扣计算函数,规则是:会员 A 打九折,会员 B 打八五折,但节假日叠加促销时有例外逻辑,另外某些商品类型不参与打折。AI 只能根据函数签名和少量注释来推测,它写出来的测试用例在逻辑上是”正确的”,但大量覆盖的是它认为合理的情况,而不是我们实际的业务规则。

跑起来,绿了,覆盖率上去了,但测试本身是空的——它只是验证了代码当前的行为,没有验证代码应该有的行为。

这是个微妙的差别,但非常重要。测试的价值在于”守护规格”,不在于”描述现状”。


工作流是怎么跑起来的

我最后稳定下来的做法是这样的:

第一步:先写测试用例的描述,不写代码。 用自然语言把”这个函数应该在什么情况下返回什么”写出来,交给 AI 去填充具体的断言和 mock。这样 AI 就不是在猜测业务,而是在执行规格。

第二步:AI 生成之后,我过一遍,重点看边界和业务特例。 不是从头审查,而是重点盯三个地方:空值/null 处理、业务上的特殊规则有没有覆盖、异步操作有没有正确等待。

第三步:跑一次,看哪些挂了,修的过程中顺便补注释。 这一步 AI 依然在参与——测试失败时直接贴报错让它分析,大多数时候两三轮就修好了。

这套流程下来,写一组测试的时间大概是以前的三分之一。但准确说,是我花的时间变少了,总耗时没那么夸张地缩短,因为 Review 的步骤本来就是必须的。


一个值得说的踩坑

有一段时间我们在用 Cursor 的 Agent 模式批量补测试,让它扫描整个目录,自动给没有测试文件的模块生成测试。

结果是:它生成了,CI 跑了,绿了,但大概两周后我们合并了一个 breaking change,测试还是全绿——因为 mock 写死了,根本没有真正调用依赖。

这是 AI 生成测试最常见的一个坑:它会把所有依赖都 mock 掉,这样测试永远不会因为依赖的行为变化而挂掉。短期看覆盖率好看,长期是个定时炸弹。

解法是:对于重要的业务逻辑,要求 AI 生成集成测试而不是纯单元测试,让真实的数据库或者服务参与进来。这样慢一点,但是有效。


现在的状态

三个月下来,我对”AI 能不能替代写测试”这个问题的答案是:它可以替代写测试的大部分体力劳动,但不能替代思考测试规格是什么

如果你把”写测试”拆开看,里面有两件事:一是把规格翻译成代码,这个 AI 做得相当不错;二是决定规格应该是什么,这个需要人来做,而且做好了整个测试才有意义。

现在我们项目的节奏是:需求阶段就把”验收标准”写清楚,然后把这些标准当成 AI 生成测试的输入。覆盖率还是一个指标,但不是唯一的了——我们开始关注”关键路径测试有没有覆盖”,而不是追求数字好看。

测试覆盖率从 28% 到 71%,这个数字变化本身没什么了不起的,因为覆盖率不等于质量。真正有意思的是,这三个月让我们团队养成了一个新习惯:在写代码之前先想清楚它应该怎么表现。这个习惯,是 AI 写测试的副产品,反而比测试本身更值钱。

如果你也有一批积压的旧代码没有测试,可以先从工具函数开始,让 AI 帮你做第一遍覆盖,然后再手工补关键业务路径。别指望一步到位,但这个起点比继续挂在技术债单子上强多了。


AI编程系列相关文章:AI辅助 Debug 实战 | AI 代码审查与重构实战 | GitHub Copilot 深度使用指南


我把代码测试这件事交给 AI 了三个月,说说什么变了
https://www.ohtudou.top/2026/04/21/2026-04-21-ai-testing-three-months/
作者
Tudo
发布于
2026年4月21日
许可协议