对在读本科、需要兼顾课程、社团和实习求职的大学生来说,课程作业、考试复习、实习申请和社团事务挤在一起,常常不知道从哪里开始。单元测试大家都知道重要,但写起来枯燥,边界条件也容易想不全。本文给出大学生用 AI 生成单元测试的一套可直接照抄的做法:把函数代码和业务规则交给 AI,先让它列出测试场景清单,确认后再生成测试代码并运行。

场景:大学生为什么需要 AI 生成单元测试

大学生写了一个处理“学习记录”数据的函数,比如按科目汇总学习时长分钟。上线前需要补测试,但时间紧,而且担心漏掉空数据、异常值这类边界情况。对大学生来说,这类需求往往和“投递 4 份暑期实习简历”“准备实习面试”这些事挤在同一周,留给它的时间并不多。

用什么工具

编辑器内的编程助手(GitHub Copilot、Cursor、通义灵码、CodeGeeX 等)可以直接根据函数生成测试;也可以把代码贴给对话助手。

一个虚构的例子

设想一个虚构场景:老何刚接手一部分新工作,既要完成“准备一场社团招新宣讲”,又要准备“完成课程小组项目报告”。面对需要生成单元测试的任务,老何的做法是:先让 AI 按固定结构起草,再对照自己掌握的事实逐项修改,涉及学号、身份证号和个人联系方式的部分一律用代号替换。这样既节省了时间,也守住了准确性和隐私的底线。

分步操作

  1. 提供被测函数代码和业务规则说明
  2. 让 AI 先列出测试场景:正常、边界、异常
  3. 确认场景清单,补充业务特有的情况
  4. 生成测试代码并在本地运行
  5. 检查失败的用例是代码问题还是测试问题

提示词模板(可直接复制)

下面的提示词可以直接复制,按大学生的实际情况替换细节:

【背景】身份:在读本科、需要兼顾课程、社团和实习求职的大学生;平时主要和同学和老师和导师和辅导员打交道。
请为下面的 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

要求:

  1. 先列出测试场景清单(正常、边界、异常)
  2. 再写测试代码,使用 parametrize 减少重复
  3. 每个测试函数名能看出测试意图

## 效果示例(虚构演示)

下面是演示用的输出示例,其中的人名、数字和事项均为虚构,实际使用时请以你自己的资料为准:

> **测试场景**
> 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/单元测试/)