让 AI 写测试后全部变绿,并不能证明测试抓得住错误。可以保留正确实现,再故意让程序漏去重、丢排序或误改大小写,看原有断言是否拒绝这些版本。
已经有AI生成测试、希望检查测试是否有效的开发者。本文使用 Python 3.11 或以上版本的标准库,先验证一组人工构造的小样本。AI 负责提出实现或解释差异,结果由本地检查决定;这里没有把模型回答当成真实运行结果。

用错误实现检查测试断言前,先定规则
本文契约是输入字符串列表,按大小写敏感的精确值去重,再按Python默认字符串顺序排序。A和a是两个不同值,空输入返回空列表。
错误版本用来审查测试,不替换真实业务代码。三个变体分别忘记去重、保持输入顺序、统一转小写,对应三个不同规则缺口。
选择能触发缺陷的输入比堆更多随机用例更重要。比如输入本来有序且没有重复,忘记去重的实现仍会通过。
给 AI 的输入要包含什么
把下面这份输入说明和你的实际样本一起交给可用的 AI 编程助手。示例只含虚构数据;对真实材料先去除账号凭据和个人信息。
为normalize(items)=sorted(set(items))写行为测试;大小写敏感。除正常用例,还检查空列表、重复、无序、A/a同时出现。再构造forget_dedupe、forget_sort、lowercase三种错误实现,说明哪个测试会失败。不要修改正确预期。
要求模型保留检查条件,并把它认为缺少的业务定义列出来。若回答改变了输入字段、忽略异常分支或直接删除原材料,先要求修正,再运行。提示词的作用是缩小任务范围,验收仍以代码和数据为准。
保存并运行最小验证程序
下方程序把关键规则和验证用例放在同一个可复跑示例中,便于先理解输入如何变成输出,再用它检查 AI 给出的实现。
新建一个空目录,把下面代码保存为 check.py,在该目录打开终端,运行 python -X utf8 check.py。代码自带示例输入,不需要安装第三方库。
def good(items): return sorted(set(items))
def forget_dedupe(items): return sorted(items)
def forget_sort(items): return list(dict.fromkeys(items))
def lowercase(items): return sorted(set(x.lower() for x in items))
cases=[([],[]),(['b','a','b'],['a','b']),(['a','A'],['A','a'])]
def failures(fn):
return [i for i,(given,want) in enumerate(cases,1) if fn(given)!=want]
assert failures(good)==[]
print('correct',failures(good))
for name,fn in [('forget_dedupe',forget_dedupe),('forget_sort',forget_sort),('lowercase',lowercase)]:
failed=failures(fn)
assert failed, name+'没有被发现'
print(name,'caught_by',failed)
怎样判断结果符合要求
正确实现的失败列表为空。三个错误实现都必须至少出现一个失败编号;如果有一个没有被抓住,先补能区分正确与错误行为的输入。
下方是这份最小示例在本地执行得到的输出。它验证示例程序与断言的关系,不代表任何 AI 模型一次就能生成同样代码,也不构成性能或生产可靠性结论。
correct []
forget_dedupe caught_by [2]
forget_sort caught_by [2, 3]
lowercase caught_by [3]
caught_by中的编号是用例位置,不是模型成绩。样本是人为设计的,不用于宣称测试覆盖率达到某个百分比。
这里用轻量比较器使错误版本的结果容易阅读;迁入unittest时,把每组given/want写为subTest,并用assertEqual保留同样语义。
哪些失败必须停下来处理
如果模型把期望值改成错误实现的输出,测试将再次变绿,但已失去独立判据。预期结果必须来自契约或人工核对。
发现三个错误不代表所有错误都被覆盖。性能、并发、Unicode排序语义和超大输入不在本例范围。
若业务规定大小写不敏感,必须先改契约和预期,再修改实现,不能把当前lowercase错误版本当正确修复。
接入自己的任务前再核对一次
把每个已发生的缺陷加入错误变体库,修复后确认旧断言确实会拒绝回退版本。
让AI分别列规则与生成代码,再用独立测试核对。避免测试与实现共同复制同一个误解。
资料与适用范围
unittest 的断言与失败信息用于表达预期行为;测试通过只反映已有用例。以下链接核对于 2026-10-03;运行环境及额外依赖按本文前述说明。
相关基础可阅读 Cursor 怎么帮代码补测试?先锁定边界用例,再运行回归命令。本文的重点是用错误实现检查测试断言,可以把两项检查作为不同步骤保留。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33325.html