我的测试框架用同一个标签覆盖了三种不同的失败
来源:dev.to — 2026-09-14
📋 概述
三条夹具分别调用同一个 reducer,返回的 failure_reasons 完全一致,中间那个 EXEC_ARGUMENTS_MISMATCH 在三种本质不同的失败里从未变过:第一条夹具送进解析器拒绝的参数,第二条送进可用但与冻结值不一致的调用,第三条送进作者自己的规范化器都拒绝的对象,导致比较根本没有完成。作者强调这些是构造输入,不能据此断定生产事故的责任方,但一个名字覆盖了三种情况,而且在什么都没比较的情况下仍然宣称「参数不匹配」——检查阶段的失败被读成了被检查对象的偏差。评论区 pm25coder 一句话点破:EXEC_ARGUMENTS_MISMATCH 之所以被误读成对模型的判决,正是因为这个名字没有主语。代码层面原因很清楚:一个 try 同时包住了三件不同的事——解析到达参数、做规范化比较、处理异常,两个不同的抛出点落进同一个 catch,而 catch 用参数的名字命名了错误。
🔑 核心要点
- 一条try 包住三种职责:解析到达的参数、执行规范化比较、处理异常。
- parseStrictJson 在参数不可读时抛错,canonicalJsonBytes 在比较本身无法进行时抛错,两者落进同一个 catch。
- 而这个 catch 只用参数不匹配来命名,于是第三种失败——比较根本没有发生——被说成了参数偏差。
- 评论者的总结是:这个标签之所以被误读成对模型的判决,是因为它的名字里没有主语。
- 作者坚持原样贴出未编辑的输出,理由是:一篇讲回执掩盖了失败方的文章,没资格给你一份清洗过的回执。
- 三种观察共用一名,读者只能自己补全语义——这是标签问题,也是可观测性设计问题。
💡 金句
EXEC_ARGUMENTS_MISMATCH 之所以被读成对模型的判决,恰恰因为这个标签的名字里没有主语。
👍 0
👎 0
← 返回 dev.to 首页