租户 A 的用例先跑,缓存里留下 tenantId=A 的配置。租户 B 的用例拿到的还是 A 的折扣,断言 expected 0.8 but was 0.9。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,配置缓存是静态 Map,生命周期跟 JVM 一样长。用例之间没有清理入口,前一个类的数据顺着活到下一个类。

「测试缓存残留」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

@AfterEach
void clearCache() {
    ConfigCache.INSTANCE.clear();
}

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

具体做法是,给缓存类加 clear 方法 在 afterEach 里调用;测试启动时用独立上下文 别复用生产单例;断言前打印缓存 key 确认读到自己那条;同类用例集中到一个类 减少跨类污染。

最后用这个标准收尾,两个租户的用例任意顺序跑都拿到各自的折扣值。

作者 9823189