用例用随机生成的手机号和金额,隔两天挂一次,报错里那组数据重新提交一遍又能通过,本地怎么跑都碰不到。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

Random r = new Random(42L);
assertThat(x).as('seed=42 amount=%s', amt).isNotNull();

随机数没有固定种子,每次入参都不同,只有撞到边界值才失败,失败那次的参数又没有打进日志,查起来只能靠反复重跑碰运气。这一点先确认清楚,后面就不用反复试。

「测试随机数据」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

具体做法是,把随机数据源换成固定种子的实例;失败时把完整入参写进断言信息;边界值单独抽成参数化用例覆盖。

改完照着核一遍,同一用例连跑二十次结果一致,失败时能凭日志里的入参原样复现。

作者 9823189