必须强制覆盖三类用例:①正常值;②边界值(如折扣0%、100%,价格为0);③异常值(如负数、超100%折扣、none、空字符串),并绑定项目测试风格与防御性方法名约束。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你给通义千问的提示词生成的单元测试总在跑通正常输入就停手,边界值像折扣0%、价格为0、空字符串全被跳过,异常输入如负数、超百折扣、None参数压根没出现,测试覆盖率卡在40%再也上不去。
强制覆盖三类用例的提示词结构
第一步:在函数代码前明确声明测试框架和用例分类要求→第二步:用数字序号逐条列出必须覆盖的场景类型→第三步:对每类场景给出至少一个具体示例,避免AI自由发挥漏掉关键点。
例如,不要只说“覆盖边界情况”,而要写成:“② 边界值:必须包含折扣0%(返回原价)、折扣100%(返回0)、商品价格为0(返回0)三个用例”。
这一步操作起来很简单,直接把函数定义粘贴后,在前面加一段带编号的硬性指令就行。AI对数字序号的识别稳定度远高于“包括但不限于”这类模糊表达。
方法一:用自然语言描述反推测试数据
通义千问在解释函数行为时,常会主动给出类似“当original_price=0时,函数返回0”这样的句子。这些不是废话,而是【可直接提取为断言的黄金数据源】。
定位回复中所有含“当……时,返回……”“例如……输出……”“输入……得到……”结构的句子→逐句提取输入参数与预期结果→按Python元组格式整理成test_cases列表。
比如它写:“当discount_percent=150时,抛出ValueError”,你就得生成一条assertRaises语句,而不是忽略这条提示去另编一个异常用例。
方法二:绑定项目已有测试风格
如果你团队已存在test_calculate.py,里面每个测试方法都带fixture setup和详细中文注释,那就别让千问凭空造轮子。
直接告诉它:“请严格按当前项目中test_*.py的格式续写,包括fixture命名(如setup_discount_calculator)、assert写法(使用pytest.approx处理浮点)、注释密度(每个测试方法前必须有3行中文说明)。”
AI一旦被锚定在真实上下文里,就不会再默认只写最简版test_开头的空壳函数。
方法三:注入防御性约束条款
在提示词末尾追加一句不可绕过的硬约束:“所有测试文件必须包含test_invalid_negative_price、test_discount_over_100_percent、test_empty_string_input三个方法名,缺一不可。”
这个动作相当于给AI设了道闸口——它无法跳过这三个名字去生成其他测试,哪怕逻辑上觉得没必要也得先建好空方法。
【注意:方法名必须完全匹配,大小写和下划线都不能错,否则生成的文件无法被pytest自动发现】











