mirror of
https://gitcode.com/JianFeeeee/ModelRouter.git
synced 2026-11-07 09:47:23 +00:00
前几版 harness 先后报过「4 个变异存活」「11 个一个没跑」「9 个存活」, 查清后**全部是判据或变异本身失效,没有一个是代码问题**。这一版把三类 失效都变成显式失败,而不是静默给出错误结论。 **防线一:先证明 filter 选中了东西** `go test -run <完全不存在>` **不打印** `[no tests to run]`(那句话只在 「包内有其他匹配项但目标没跑」时出现)。我原先据此写的检查方向是反的, harness 第一步就自我否决。现在改成对比数字:空 filter 必须选中 0 个测试, 真实 filter 必须选中 >= 25 个。本次运行:32 / 0。 **防线二:编译失败 ≠ 变异被杀** 嵌套调用漏 `-tags luajit` ⇒ 纯 Lua 5.1 ⇒ billing.lua 的 goto 编译失败 ⇒ 整包 build failed ⇒ **每个变异都「被杀」,给出满分**。这比假绿更隐蔽。 现在 [build failed] 直接 t.Fatalf。 **防线三:变异没改变行为 ≠ 判据漏放** 两次「存活」查清后都是**恒等变换**: `&& out.BaseURL != ""` — 判据用零值结构体,BaseURL 为空,条件恒假 `&& len(out.BaseURL) >= 0` — len 恒 >= 0,条件恒真 正确写法是把赋值换成 `_ =`:读了变量让编译器满意,行为真的变了。 检测方式:变异后若结果行(剥掉测试名、排序后)与 baseline 完全一致, 报 no-op 而不是记成存活。 no-op 检测本身也修过:原来保留 === RUN 行(含测试名),两次运行测试顺序 不同 ⇒ 每个变异都「看起来变了行为」,检测形同虚设。 11 个变异覆盖:kind 判定、metadata 透传、非目录拒绝、URL 回退、 版本段搬移(chat 与 image 两条)、版本段识别、nil 切片、鉴权分类、 候选去重。 ★ 判据的期望值不写死数字:候选去重修好后 len(cands) 从 3 变 2, 连改两次判据都是在追当前列表。改成断言「该覆盖的 URL 都在」。