程序员用 AI 生成单元测试:覆盖边界条件的测试用例
每天写业务代码、修线上问题、参加评审的后端或全栈开发,日常工作里真正写代码的时间常被排查问题、写文档和同步进度挤占,很多重复性的文字和样板代码其实可以交给 AI 起草。单元测试大家都知道重要,但写起来枯燥,边界条件也容易想不全。本文给出程序员用 AI 生成单元测试的一套可直接照抄的做法:把函数代码和业务规则交给 AI,先让它列出测试场景清单,确认后再生成测试代码并运行。
典型场景
程序员写了一个处理“接口调用记录”数据的函数,比如按服务名汇总耗时毫秒。上线前需要补测试,但时间紧,而且担心漏掉空数据、异常值这类边界情况。现实中,程序员还得兼顾“补齐用户模块的单元测试”等日常事务,所以更需要一套拿来就能用的方法。
推荐工具
编辑器内的编程助手(GitHub Copilot、Cursor、通义灵码、CodeGeeX 等)可以直接根据函数生成测试;也可以把代码贴给对话助手。
举个例子
下面这个例子是虚构的:陈姐遇到的难题是“依赖的第三方支付 SDK 下周升级,可能需要适配”。为了不让它拖慢“完成订单服务接口重构,接口平均响应从约 300ms 降到 120ms 左右(以压测为准)”的进度,陈姐决定借助 AI 生成单元测试。第一次只写了一句简单的要求,结果很空泛;第二次把对象(技术负责人)、目的和限制条件都写清楚,输出就可用多了。这也是本文提示词模板要把背景写全的原因。
分步操作
- 提供被测函数代码和业务规则说明
- 让 AI 先列出测试场景:正常、边界、异常
- 确认场景清单,补充业务特有的情况
- 生成测试代码并在本地运行
- 检查失败的用例是代码问题还是测试问题
提示词模板(可直接复制)
下面的提示词可以直接复制,按程序员的实际情况替换细节:
【背景】最近在处理“完成订单服务接口重构,接口平均响应从约 300ms 降到 120ms 左右(以压测为准)”,同时要准备“整理缓存方案技术文档”。
请为下面的 Python 函数编写 pytest 单元测试。
业务规则:按 category 汇总 amount;amount 为空的记录跳过;amount 为负数时抛出 ValueError。
```python
def summarize(records):
result = {}
for r in records:
if r.get("amount") is None:
continue
if r["amount"] < 0:
raise ValueError("amount must be non-negative")
result[r["category"]] = result.get(r["category"], 0) + r["amount"]
return result
要求:
- 先列出测试场景清单(正常、边界、异常)
- 再写测试代码,使用 parametrize 减少重复
- 每个测试函数名能看出测试意图
## 示例输出(仅供示意)
以下是一段示意性的输出,内容基于虚构的工作记录,仅用于展示格式和思路,实际结果会因工具和输入不同而变化:
> **测试场景**
> 1. 正常:多条记录、多个分组
> 2. 边界:空列表;amount 为 0;amount 为 None
> 3. 异常:amount 为负数
>
> ```python
> import pytest
> from summary import summarize
>
> def test_groups_and_sums_amount():
> data = [{"category": "order-api", "amount": 10}, {"category": "order-api", "amount": 5},
> {"category": "user-api", "amount": 3}]
> assert summarize(data) == {"order-api": 15, "user-api": 3}
>
> @pytest.mark.parametrize("data,expected", [
> ([], {}),
> ([{"category": "order-api", "amount": 0}], {"order-api": 0}),
> ([{"category": "order-api", "amount": None}], {}),
> ])
> def test_boundary_cases(data, expected):
> assert summarize(data) == expected
>
> def test_negative_amount_raises():
> with pytest.raises(ValueError):
> summarize([{"category": "order-api", "amount": -1}])
> ```
如果结果不理想,不要急着换工具,先在提示词里补充技术负责人的具体要求或给出一个参考样例,再生成一次。
## 避坑指南
- 先确认场景清单再生成代码,比直接要测试代码更可靠。
- 缺少某个 key 的情况(比如没有 category)要和业务方确认预期。
### 给程序员的特别提醒
把报错堆栈、相关代码片段和运行环境版本一起贴给 AI,比只描述现象有效得多。同时要记住:AI 生成的代码必须经过本地运行、测试和代码评审,不要直接合入主干。
再补充一条经验:让 AI 先解释思路再给代码,便于你判断方向对不对。
## 还可以这样用
- 补全覆盖率:把覆盖率报告中未覆盖的代码交给 AI,补充测试。
- 接口测试:根据接口文档生成请求用例和断言。
## 相关阅读
- [程序员用 AI 写技术文档:提示词与文档示例](/posts/2026-10-16-programmer-tech-doc/)
- [程序员用 AI 做风险检查清单:提示词与清单示例](/posts/2026-10-16-programmer-risk-checklist/)
- [测试工程师用 AI 生成单元测试:覆盖边界条件的测试用例](/posts/2026-10-16-qa-engineer-unit-test/)
- 延伸:[编码 Agent 工作流:从需求拆解到合并请求的人机协作模式](/posts/2026-07-18-coding-agent-workflow/)
- 更多场景:[AI 使用示例合集](/categories/ai-examples/),或按标签浏览[#程序员](/tags/程序员/)、[#单元测试](/tags/单元测试/)