AI 写单元测试和手写测试经常被放在一起比较。两者没有绝对的好坏,关键在于任务类型。

核心区别

手写测试更贴合你对业务的理解,但列举边界情况耗时;AI 写测试能快速列出大量用例,你再根据业务取舍。

从原理看,写测试需要系统地思考各种输入情况,这正是 AI 擅长列举的部分;你再根据业务判断取舍,就能更快地得到质量较高的测试。AI 写测试的意外收获,往往是发现代码本身的问题。当它列出“如果输入为空会怎样”“如果两个参数相等会怎样”时,你可能会发现自己从没考虑过这些情况。所以用例清单阶段比生成代码阶段更有价值:认真看清单,才能真正提升代码质量。

什么时候选 AI 写单元测试

  • 为已有代码补充测试。
  • 新功能开发时同步编写测试。
  • 重构前需要用测试保护现有行为。
  • 需要发现代码中未处理的边界情况。

一个虚构的对比:一位测试工程师接手一个没有测试的旧模块,需要在重构前补齐测试。她把模块代码交给 AI,先生成用例清单,和开发同事一起确认哪些是预期行为、哪些其实是缺陷。最终补齐了 40 多个测试用例,重构时有两个测试失败,及时发现了被意外改变的行为。

什么时候手写测试就够了

任务简单、一次性、对格式没有严格要求时,手写测试往往更省事。另外要注意,测试依赖外部服务。更好的做法是:使用模拟对象,保证测试稳定可重复。

如果选择 AI 写单元测试,这样开始

  1. 让 AI 先列出测试用例清单:正常情况、边界值、异常输入。
  2. 确认用例清单后再生成测试代码。
  3. 运行测试,对失败的用例判断是代码问题还是测试问题。
  4. 把测试纳入持续集成,定期维护。

示范提示词

以数据分析师的场景为例:

请为下面这个函数编写单元测试,测试框架是[框架名]。
函数用途:处理数据分析师工作中“渠道”相关的数据计算。
请:
1. 先列出测试用例清单:| 用例 | 输入 | 预期输出 | 类型(正常/边界/异常)|;
2. 至少包含:空输入、极大值、非法格式、重复数据等情况;
3. 等我确认清单后再写测试代码;
4. 测试命名清楚地表达测试意图。
函数代码:[粘贴]

使用时请注意:AI 不了解你们的指标口径,写出的语句和结论都要用小样本核对一遍。

一个常被问到的问题

测试覆盖率越高越好吗? 覆盖率是参考指标,更重要的是测试是否覆盖了关键逻辑和容易出错的情况。

结论

一句话:任务复杂或需要反复执行时选 AI 写单元测试,临时的简单问题用手写测试即可。两者也可以先后使用:先用手写测试快速试探,再用 AI 写单元测试打磨。

一个容易忽略的点

选择哪种做法,还要考虑之后要不要复用。只用一次的任务,多花十分钟准备未必划算;每周都要做的任务,花时间把 AI 写单元测试用好,后面每次都能省事。

相关阅读