用例断言新建订单的 id 等于 1,本地空库能过。CI 上同一个库有两千条历史数据,实际 id 是 20481。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
TRUNCATE TABLE orders; SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_NAME='orders';
自增序列不一定随清表重置,也不该被测试依赖。断言把实现细节当成了业务结果。这一点先确认清楚,后面就不用反复试。
碰到「自增 ID 假设」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
具体做法是,断言 id 非空 再用它查详情 不比对具体数字;需要固定 id 就显式插入指定主键;清表用 TRUNCATE 并确认自增值归零 或者干脆不依赖;这条写进用例规范 评审时检查。
改完照着核一遍,在有两万条历史数据的库上跑同一用例仍然通过。
