从一个输入输出明确的遗留函数开始,让 Cursor 先归纳现有行为,再生成分层测试,运行 pytest 并逐项排查错误假设、环境问题与隐私风险。

目标很具体:选中一个缺少测试、输入输出明确的 Python 函数,让 Cursor 协助建立正常、边界和异常三类用例,最终由本地 pytest 给出可重复的结果。整个过程不重写函数、不顺手修复旧逻辑,也不把 AI 的解释当成规格。
版本、权限与完成标准
本文面向 Cursor 当前稳定版,日期为 2026 年 8 月 30 日。Agent、代码库上下文、模型选择、隐私模式及套餐额度可能因账户或组织策略不同而变化,请以当前界面和 Cursor 官方文档为准。若没有可用的自动编辑权限,也可以只让对话生成补丁,再手动保存。

| 前提 | 要求 |
|---|---|
| 运行环境 | 本地项目可启动,Python 与 pytest 已安装 |
| 目标函数 | 规模较小,依赖可识别,暂不选择支付或权限核心逻辑 |
| 完成标准 | 新增测试可独立运行,原测试仍通过,生产代码无非预期差异 |
pytest 的基础发现规则和执行方式可核对 pytest 入门文档。先在终端记录 Python 版本、依赖安装方式、当前测试命令和基线结果;基线本身失败时,不要让 Cursor 把旧失败误判为新测试造成。
先把遗留行为变成可检查的清单
遗留函数常见的难点不是语法,而是规格缺失。阅读函数、调用方、注释和已有错误处理,列出输入类型、返回值、可空字段、副作用及明确抛出的异常。只记录代码目前表现和调用方依赖,不把“更合理的行为”写进本轮测试。
任务:只为目标函数补测试,不修改生产代码。
目标:覆盖正常、边界、异常输入。
上下文:目标文件、直接调用方、相关类型定义。
约束:不要猜测未出现的业务规则;先列行为清单和待确认项。
输出:测试矩阵、pytest 代码、每个断言的依据。
把目标函数、直接依赖和测试目录加入上下文即可,不要无差别索引整个仓库。要求 Cursor 先输出测试矩阵,矩阵至少包含输入、预期返回或异常、依据和优先级。出现无法从代码确认的规则时,标成待人工确认,而不是直接生成强断言。
按小批次生成并运行 pytest
- 创建分支。确认工作区干净,运行现有测试并保存命令与结果。
- 先写正常用例。选择一到两个真实调用路径,检查返回值与必要副作用,不要一开始大量使用快照。
- 补边界用例。考虑空集合、零、上下界、缺失键、Unicode、重复值等,但只保留与函数契约有关的输入。
- 补异常用例。仅断言代码明确抛出的异常类型;错误文本不稳定时,不必锁死完整文案。
- 逐批运行。先执行单个测试文件,再执行完整测试集。每批只接受一个容易审查的小补丁。
python -m pytest tests/test_target.py -q
python -m pytest -q
如果函数依赖时间、随机数、文件或网络,优先在外部边界使用 fixture、临时目录或 mock。不要为了容易测试而让 Cursor 改写生产函数;确实需要依赖注入时,应另开重构任务,并先获得行为测试保护。
失败诊断:先判断测试错还是代码错
| 现象 | 检查动作 |
|---|---|
| 导入失败 | 核对执行目录、包结构、虚拟环境与项目原有测试命令 |
| 断言不符 | 手工调用函数,检查 AI 是否把期望行为当成当前行为 |
| 异常类型不符 | 沿实际分支确认异常来自目标函数还是下游依赖 |
| 单测通过、全量失败 | 排查共享状态、环境变量、测试顺序和未恢复的 mock |
| 测试偶发失败 | 固定时间与随机源,移除对网络和本机状态的依赖 |
遇到疑似缺陷时,先保留最小复现并注明“当前行为”和“期望行为”的差异。不要在同一个 AI 补丁中同时改测试和生产代码,否则测试可能只是迎合了新实现。
人工复核与边界
- 查看 Git 差异,确认只有预期测试文件、fixture 或测试数据发生变化。
- 逐条追溯断言依据,删除只为提高覆盖率而没有业务意义的用例。
- 检查 mock 路径是否对应被测模块实际引用位置,而非原始定义位置。
- 确认没有把密钥、客户数据、内部地址、日志或专有代码发送到未批准的模型服务。
- 记录模型协助范围,但测试结果以本地命令和人工审查为准。
AI 编码会涉及提示注入、敏感信息泄露和不安全输出等风险,可用 OWASP 大语言模型应用风险项目作为安全检查入口。组织仓库应先核对数据保留、代码使用和访问权限政策。模型调用、上下文索引及更高额度可能产生费用,具体限制以账户当前套餐为准。
结论
可靠的 Cursor Python 单元测试流程不是“一键生成覆盖率”,而是先冻结当前行为,再让 AI 提议测试矩阵,随后用 pytest、Git 差异和人工判断逐层验证。只要坚持小函数、小补丁和可追溯断言,遗留代码就能获得一张可信的安全网。
常见问题
Cursor 生成的 Python 单元测试可以直接提交吗?
不建议直接提交。至少要运行目标测试与完整测试集,并人工确认每个断言来自现有行为或已批准的需求,而不是模型猜测。
为了让测试通过,可以顺便修改遗留函数吗?
本任务不应修改函数行为。若测试暴露真实缺陷,应单独记录并评审修复,让行为变更与测试补齐保持可区分。
没有 Cursor Agent 权限还能完成吗?
可以。让 Cursor 输出测试矩阵或补丁文本,手动创建测试文件并在本地运行即可;具体可用入口需核对当前版本和组织策略。