我的测试套件中有一些测试,这些测试可以在我所有的同事上运行,但在我身上失败了。那就是以瞬间的形式从不同的实体返回两次,并将它们相互比较。它们实际上匹配,但不适合我。
这是描述的行:
assertEquals(notUpdatedRule.getModStamp(), rule.getModStamp());
作为错误消息,我得到以下内容:
org.opentest4j.AssertionFailedError:
Expected :2023-01-22T19:46:20.754829Z
Actual :2023-01-22T19:46:20.754829486Z
我已经尝试将我的 openjdk 版本与我的同事的版本调整,但这并没有改变任何东西。
我建议你改用Instant.now(Clock clock)
。来自其JavaDocs:"使用这种方法允许使用备用时钟进行测试。
问题可能来自不同的时区、不同的操作系统、系统中计时器的不同硬件精度等。
指定Clock
时,您可以为测试创建具有定义精度(毫秒、秒、分钟或任何其他Duration
)的。
或者,您可以使用Clock.fixed(Instant fixedInstant, ZoneId zone)
提供一个始终为您的测试返回相同时刻的Clock
(我真的建议进行可重现的测试!
对于生产用途,您只需提供一个Clock.systemUTC()
即可获得Instant.now()
的当前行为。Clock
的JavaDocs更详细地解释了使用它的原因。