大学生用 AI 生成单元测试:提示词与 pytest 示例
对在读本科、需要兼顾课程、社团和实习求职的大学生来说,课程作业、考试复习、实习申请和社团事务挤在一起,常常不知道从哪里开始。单元测试大家都知道重要,但写起来枯燥,边界条件也容易想不全。本文给出大学生用 AI 生成单元测试的一套可直接照抄的做法:把函数代码和业务规则交给 AI,先让它列出测试场景清单,确认后再生成测试代码并运行。
场景:大学生为什么需要 AI 生成单元测试
大学生写了一个处理“学习记录”数据的函数,比如按科目汇总学习时长分钟。上线前需要补测试,但时间紧,而且担心漏掉空数据、异常值这类边界情况。对大学生来说,这类需求往往和“投递 4 份暑期实习简历”“准备实习面试”这些事挤在同一周,留给它的时间并不多。
用什么工具
编辑器内的编程助手(GitHub Copilot、Cursor、通义灵码、CodeGeeX 等)可以直接根据函数生成测试;也可以把代码贴给对话助手。
一个虚构的例子
设想一个虚构场景:老何刚接手一部分新工作,既要完成“准备一场社团招新宣讲”,又要准备“完成课程小组项目报告”。面对需要生成单元测试的任务,老何的做法是:先让 AI 按固定结构起草,再对照自己掌握的事实逐项修改,涉及学号、身份证号和个人联系方式的部分一律用代号替换。这样既节省了时间,也守住了准确性和隐私的底线。
分步操作
- 提供被测函数代码和业务规则说明
- 让 AI 先列出测试场景:正常、边界、异常
- 确认场景清单,补充业务特有的情况
- 生成测试代码并在本地运行
- 检查失败的用例是代码问题还是测试问题
提示词模板(可直接复制)
下面的提示词可以直接复制,按大学生的实际情况替换细节:
【背景】身份:在读本科、需要兼顾课程、社团和实习求职的大学生;平时主要和同学和老师和导师和辅导员打交道。
请为下面的 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": "高数", "amount": 10}, {"category": "高数", "amount": 5},
> {"category": "英语", "amount": 3}]
> assert summarize(data) == {"高数": 15, "英语": 3}
>
> @pytest.mark.parametrize("data,expected", [
> ([], {}),
> ([{"category": "高数", "amount": 0}], {"高数": 0}),
> ([{"category": "高数", "amount": None}], {}),
> ])
> def test_boundary_cases(data, expected):
> assert summarize(data) == expected
>
> def test_negative_amount_raises():
> with pytest.raises(ValueError):
> summarize([{"category": "高数", "amount": -1}])
> ```
如果结果不理想,不要急着换工具,先在提示词里补充导师和辅导员的具体要求或给出一个参考样例,再生成一次。
## 实用技巧与常见坑
- AI 有时会根据代码的现有行为写断言,如果代码本身有 bug,测试也会“通过”。
- 先确认场景清单再生成代码,比直接要测试代码更可靠。
- 测试数据用虚构值,不要使用真实的学号、身份证号和个人联系方式。
### 给大学生的特别提醒
要求 AI 用例子和类比解释概念,学完再让它出题检验。还有一点很关键:按学校学术诚信规定使用 AI,作业和论文不要直接提交 AI 生成的内容。
很多大学生还会这样做:把 AI 当作随时可问的辅导老师:先自己想,再让它讲解和纠错。
## 变体用法
- 补全覆盖率:把覆盖率报告中未覆盖的代码交给 AI,补充测试。
- 接口测试:根据接口文档生成请求用例和断言。
## 相关阅读
- [大学生用 AI 写命令行命令:用自然语言生成并解释命令](/posts/2026-10-16-college-student-shell-command/)
- [大学生用 AI 写发言稿和致辞:几分钟写出不念稿也自然的发言](/posts/2026-10-16-college-student-speech-writing/)
- [游戏开发者用 AI 生成单元测试:覆盖边界条件的测试用例](/posts/2026-10-16-game-developer-unit-test/)
- 延伸:[AI 生成单元测试:提高覆盖率而不制造“假安全感”](/posts/2026-07-27-ai-unit-test-generation/)
- 更多场景:[AI 使用示例合集](/categories/ai-examples/),或按标签浏览[#大学生](/tags/大学生/)、[#单元测试](/tags/单元测试/)