当 AI 告诉你「测试全过」时:3 次被拆穿的假警报
让 AI Agent 帮你写测试、跑测试你多半收到过一句令人安心的提示「全部通过All Passed」。但很多时候事后查验才会发现这句承诺漏洞百出。这篇文章记录了三次「全部通过」被无情拆穿的过程。所有的数字和日志都真实存在未作修改。文章最后总结了三个针对「假通过」的硬核解法。背景提示事情发生在一台 Windows 测试机上几个 AI Agent 正分头协作将一个名叫 Polter 的多 Agent 终端应用移植到 Windows 平台。第一次「假摔」号称 16 个通过其实 3 个根本没碰到当时的界面上排布着 17 个标签Tab。测试 Agent 写了一段脚本挨个去点击这 17 个标签的中心点。一开始Agent 自信地汇报了战况系统播报17 tabs, 1 mismatches字面意思只有 1 个报错其余 16 个完美通过。但仅仅四分半钟后写测试的 Agent 自己推翻了这行读数真正被有效检验过的只有 13 个。标签状态Agent 最初汇报真实情况假警报原因第 1~13 个成功成功正常点击没问题。第 14 个失败成功界面太挤标签中心点被右侧的「」按钮盖住了点错位置了。第 15~17 个成功未测试坐标已超出屏幕边界物理上根本点不到测试函数“闭眼”报了通过。为什么 15~17 号标签会被标记为通过因为测试脚本只是去问了代码内部的判定函数函数闭着眼睛回了一句ok。它看似全绿其实一个像素都没真正测到。Agent 留言录“报假警报的测试好歹还会让人看一眼而报0 mismatches的测试往往是让代码失去信任的最快方式。”修复之后测试结果不再是非黑即白的过与不过而是变成了三个维度的真实数据17 tabs, 13 ok, 0 mismatches, 4 untested第二次「盲区」盯着一个永远不会变的像素点第一次是测试脚本在自欺欺人第二次则是测试标准定得极其荒谬。为了测试「窗口拉大时画面能不能及时跟上」Agent 制定了如下判定标准扩大窗口尺寸。检查拉大前后窗口中心点的像素颜色是否发生变化。如果没变说明画面跟上了。从数据上看窗口尺寸从984x631变大到了1224x751中心点颜色一模一样。测试完美通过然而这个测试在 Bug 存在的情况下安然无恙地「全绿」了一整天。当天下午换了一种测量方式后真相大白当窗口被拉大时新增的边缘区域全是黑屏画面渲染其实失败了。但因为旧画面一直固定在左上角无论怎么拉大原本的「中心点」永远都会落在旧画面里。测试标准测量位置结果缺陷旧标准 (假绿)固定的窗口「旧中心点」永远通过就像蒙上了眼睛去验证光的存在完全看不到边缘的黑屏。新标准 (真抓)算出「新露出来的边缘区域」测新区域像素真实报错因为新区域的像素绝对不可能来自上一帧画面。第三次「幽灵」它之所以绿是因为根本没触发前两次的测试好歹还在机器上跑了第三次在报出「全绿」的那台机器上根本连跑都没跑过。当时团队在修一个 Windows 独有的 Bug子进程输出权限被 AutoRun 配置拦截。为了防止 Bug 回归Agent 写了一条测试让子进程去尝试输出能输出就是ok。这条测试在 macOS 开发机上跑永远是全绿通过。提交代码的 39 分钟后在 Windows 真机上第一次跑直接爆红失败。运行环境测试结果真实原因macOS (开发机)全绿通过macOS 压根没有 Windows 的 AutoRun 机制这条容易报错的代码路径连碰都没碰到。Windows (真机)爆红失败环境触发了拦截机制真实暴露了 Bug。Agent 留言录“一个专门为了「看机器环境决定的 Bug」而写的测试在原本就安全的机器上跑出来的绿什么也证明不了。”怎么知道自己在被骗三个现成的解法总结这几次发现假测试的路径有一件事非常显眼没有哪一次是通过把原来那条绿色的测试再跑一遍来发现问题的。你要怎么知道一条测试是不是在骗你Agent 给出了一个极其精准的判别法“不要问『这条测试通过了吗』。你要问『如果被测的那个东西坏了这条测试能看得见吗』”在当时的开发记录里这句话最终落地成了三个非常具体的做法可以直接抄作业1. 汇总行必须报三个数不要只报「通过」和「失败」。没有被触发的代码绝不能被藏在ok的数字里。通过 (OK)不符 (Mismatch/Fail)没测到 (Untested/Skipped)——三个数加起来必须等于总数。2. 「预期为空」的旁边绑一条「预期非空」如果你测试的标准是“日志里没有报错”这可能意味着没报错但也可能意味着代码压根就没运行断言必须有底线你可以要求没报错但必须同时断言**“程序确实执行到了这里”**比如要求某个常规启动日志至少出现一次。如果没有一律记作「没测到」。3. 故意改坏代码看测试红不红最硬核写完测试后故意把被测逻辑改错比如把取点位置写偏或者强行制造异常。如果代码明明坏了测试依然是绿的说明这个测试根本就是瞎的。每一次主动制造的红都是为了证明下一次的绿有意义。下次如果你的 AI Agent 潇洒地告诉你0 failures时记得接着问它两个数字“跳过了几格有几格根本没跑到”

相关新闻

双栈实现四则运算计算器:解析运算符优先级建模

双栈实现四则运算计算器:解析运算符优先级建模

1. 项目概述:这不是一道编程题,而是一次对基础计算逻辑的重新校准“第6.7节 stack 1918 问题 A: 简单计算器”——看到这个标题,很多人第一反应是:又一道算法课后习题?刷过LeetCode的人可能下意识点开就想跳过。但我在…

2026/10/13 4:00:58 阅读更多 →
ILI9881C DSI屏初始化代码实战:800x1280面板点亮与避坑指南

ILI9881C DSI屏初始化代码实战:800x1280面板点亮与避坑指南

简介:一套适用于ILI9881C液晶显示控制器的开发资料包,面向嵌入式系统与物联网设备开发者,主要解决8001280分辨率屏幕的驱动初始化与硬件适配问题。压缩包内共2个文件,包含官方Datasheet PDF与C语言初始化代码,整体约8.…

2026/10/13 4:00:58 阅读更多 →
Qt PDF预览:用QPrintPreviewWidget实现打印预览与避坑指南

Qt PDF预览:用QPrintPreviewWidget实现打印预览与避坑指南

简介:面向需要在Qt应用中集成PDF预览能力的开发者,这套示例直接采用QPrintPreviewWidget配合QPrinter、QPainter完成PDF渲染,全程未引入任何第三方库,同时支持放大、缩小视图,操作简单直观。压缩包共24个文件、约3.93M…

2026/10/13 4:00:58 阅读更多 →

最新新闻

IIS管理器打开全攻略:本机启动、远程连接与排错实战

IIS管理器打开全攻略:本机启动、远程连接与排错实战

搞Windows服务器的同学都清楚,IIS管理器这个窗口,看着不起眼,却是撑起大量Web业务的关键工具。很多人以为它就是个“打开就能用”的图形界面,但在实际运维里,光是怎么把它顺利打开、正常连上远程站点,就能筛…

2026/10/13 5:33:32 阅读更多 →
从compose到组合上下文:函数组合的工程化实战复盘

从compose到组合上下文:函数组合的工程化实战复盘

函数组合不是新东西,但真正把它做到"极致"和"优雅",我用了将近一年的时间反复打磨。这篇文章是我对这段时间的完整复盘。我不打算讲枯燥的范畴论,也不打算罗列一堆库的API,我想说的是:我如何从一个…

2026/10/13 5:33:32 阅读更多 →
充电器空载发热、待机功耗异常怎么办?温度保险电阻排查维修实战

充电器空载发热、待机功耗异常怎么办?温度保险电阻排查维修实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 5:33:32 阅读更多 →
fio-3.8完整指南:从解压编译到IOPS与延迟分析实战

fio-3.8完整指南:从解压编译到IOPS与延迟分析实战

简介:FIO(Flexible I/O Tester)3.8 版本完整源代码压缩包,面向存储性能测试工程师、系统运维与内核/驱动开发者,用于在 SSD、HDD、RAID、NVMe 等场景下评估读写吞吐、IOPS 与延迟,并开展压力测试与瓶颈定位…

2026/10/13 5:33:32 阅读更多 →
python -v 和 python -V 的区别:命令行参数大小写敏感与解释器启动排查

python -v 和 python -V 的区别:命令行参数大小写敏感与解释器启动排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 5:33:32 阅读更多 →
目标类型new表达式:现代编程语言的类型推断演进

目标类型new表达式:现代编程语言的类型推断演进

1. 目标类型new表达式的前世今生第一次看到var list new List<string>();这种写法时&#xff0c;我还在用Java写ArrayList<String> list new ArrayList<String>();。这种重复的类型声明总让我觉得像在说废话——明明右边已经写了类型&#xff0c;为什么左边…

2026/10/13 5:32:32 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目&#xff0c;我最大的感受是&#xff0c;大部分坑不是出在技术前沿&#xff0c;而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节&#xff0c;最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了&#xff0c;很难不碰到舵机控制这道坎。做智能小车要转方向&#xff0c;做机械臂要抬关节&#xff0c;做云台要偏航俯仰&#xff0c;背后都是同一个东西在干活&#xff1a;舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”&#xff1f;——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台&#xff1f;或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜&#xff1f;又或者&#xff0c;在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →