千问ai生成函数代码后需补全单元测试:一、依函数签名建测试骨架;二、从自然语言描述提取输入输出对;三、用mock隔离外部依赖;四、用结构化提示反向驱动测试生成;五、复用项目既有测试风格续写。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

如果您使用千问AI生成了函数代码,但尚未为其配备可执行、可验证的单元测试,则可能面临逻辑覆盖不全、边界场景遗漏或外部依赖干扰等问题。以下是针对千问AI输出代码开展单元测试的多种实操路径:
一、基于函数签名自动生成测试骨架
该方法利用千问AI输出代码中的函数名、参数列表与返回类型,快速构建可运行的测试类结构,避免手动推导输入输出组合,适用于Python等动态语言中定义清晰的函数。
1、复制千问AI生成的目标函数完整代码,包括def语句、全部参数及文档字符串(含类型提示)。
2、新建test_原函数名.py文件,在顶部导入import unittest,并定义以Test开头、后接原函数名的unittest.TestCase子类。
3、在类中添加以test_为前缀的方法,方法名体现典型用例意图,例如test_add_two_positive_integers_returns_sum()。
4、方法体内调用原函数并传入占位参数,使用self.assertEqual(actual, expected)进行断言,初始expected可设为None,后续根据函数逻辑修正。
二、从自然语言描述中提取测试用例
千问AI在解释函数行为时,常嵌入“例如”“当输入…时,返回…”等显式输入-输出对,这些文本是高质量测试数据的直接来源,无需额外构造即可转化为可执行断言。
1、扫描千问AI回复全文,定位包含“例如”“比如”“输入”“输出”“返回”“当…时”等关键词的句子。
2、逐句提取成对出现的输入值与期望结果,注意识别隐式类型:如字符串"null"需判断是否应转为None,数字字符串"42"需确认是否保留为str或转为int。
3、将每组提取结果封装为元组,统一存入test_cases = [ (input1, input2, expected), ... ]列表。
4、在测试方法中使用for input1, input2, expected in test_cases:遍历,调用函数并执行self.assertEqual(func(input1, input2), expected)。
三、使用Mock隔离外部依赖
当千问AI生成的函数调用requests.get、datetime.now()、random.choice()等不可控模块时,真实调用会导致测试不稳定、耗时或失败,必须通过Mock切断外部影响。
1、在测试文件顶部导入from unittest.mock import patch, Mock。
2、检查目标函数源码,识别所有被调用的第三方函数全路径,例如my_module.requests.get或utils.time.time。
3、在测试方法上方添加@patch('my_module.requests.get')装饰器,路径必须与运行时导入路径完全一致。
4、在方法签名中增加mock_get参数,设置其返回行为:mock_get.return_value.status_code = 200,或mock_get.return_value.json.return_value = {"result": "ok"}。
四、依据结构化提示反向驱动测试生成
将测试需求前置为明确指令,引导千问AI按工业级标准输出完整可运行测试文件,而非零散断言片段,确保覆盖正常流、边界值与异常路径。
1、构造提示词:“请为以下Python函数生成unittest测试类,要求:① 覆盖空输入、负数输入、超大数值输入;② 每个测试方法命名符合test_动词_名词_条件规范;③ 自动识别并Mock所有requests调用;④ 包含setUp初始化测试数据。”
2、紧随其后粘贴千问AI生成的原始函数代码,确保缩进、冒号、引号等语法字符无误。
3、要求输出仅含Python代码,不含任何说明文字、Markdown格式或示例输入输出。
4、接收响应后,直接保存为.py文件,在命令行执行python -m unittest test_xxx.py -v验证通过性。
五、复用项目既有测试风格续写新用例
若工程中已存在成熟测试文件,保持命名习惯、断言方式、fixture使用逻辑的一致性,可降低维护成本并提升团队协作效率。
1、截取当前项目中一个典型测试方法,包括其装饰器(如@parameterized.expand)、setUp调用、多断言结构及注释风格。
2、将该片段连同待测函数代码一并提交给千问AI,并指令:“请模仿上述风格,为该函数新增三个测试方法,分别覆盖空字符串、None参数、长度为1000的列表输入。”
3、检查AI输出中import语句是否与项目一致,如项目使用pytest则不应出现unittest导入。
4、将新生成的方法体内容复制至现有测试类中,确认无命名冲突且self.调用链完整。










