用python + pytest为函数写单元测试需明确技术栈、提供完整原始代码、说明外部依赖、指定关键路径覆盖场景、要求输出可直接运行的完整.py文件。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你想让AI根据已有代码自动生成单元测试,但直接丢一段代码过去,AI写的测试要么漏掉边界条件,要么断言写错、mock失效,甚至根本跑不起来。这不是AI不行,而是提示词没给到位——缺上下文、缺格式约束、缺执行要求。
明确告诉AI你要什么语言和框架
在提示词开头第一句就写清技术栈,比如“用Python + pytest为以下函数写单元测试”,不能只说“写个测试”。AI不知道你用JUnit还是Jest,也不知道你项目里用的是assert还是expect。漏掉这句,AI大概率按自己训练数据里最常见的默认值猜,猜错就全盘返工。
写明版本信息更稳妥,例如“pytest 7.4+”或“JUnit 5.10”,因为不同版本的API(比如@ExtendWith和@RegisterExtension)差异很大。
提供可直接复制粘贴的原始函数代码
把待测函数完整贴进来,包括所有import语句、类型注解、docstring。不要截图、不要省略、不要改名——AI没法推理出你删掉的那行from utils import validate。
如果函数依赖外部模块(如requests、datetime),在提示词里加一句说明:“该函数内部调用requests.get(),请用pytest-mock或unittest.mock.patch模拟。”否则AI会傻乎乎地尝试真实发起HTTP请求。
指定测试覆盖的关键路径
方法一:用自然语言列清楚必须覆盖的场景
① 正常输入返回预期结果
② 输入为空字符串时抛出ValueError
③ 输入含非法字符时返回False(不是抛异常)
④ 调用第三方API失败时降级返回默认值
方法二:直接给测试用例表格(AI识别表格结构很稳)
| 输入 | 预期输出 | 异常类型 | 备注 |
|------|----------|----------|------|
| "abc" | True | — | 基础正例 |
| "" | — | ValueError | 空字符串必须报错 |
| "a b c" | False | — | 含空格视为非法 |
【表格中“—”代表此处不填值,AI会自动留空或写None,千万别写“无”或“空”】
强制要求生成可立即运行的完整测试文件
在提示词末尾加上这句话:“输出内容必须是完整的.py文件代码,包含所有必要import、class定义(如有)、test函数,且能直接复制进项目目录后用pytest test_xxx.py运行通过。”
这一步卡住AI的自由发挥欲——它不会给你零散的代码片段,也不会塞一堆注释解释原理,更不会用伪代码搪塞。你拿到的就是能进CI流水线的那一段。
如果原函数在类里,提醒AI:“测试类名必须与被测类名一致,后缀加Test,例如UserValidator → UserValidatorTest”。不加这句,AI可能起名TestUserValidation或者ValidationTestCase,导致pytest发现不了测试。











