在assertEquals语句中经过的瞬间的Java春季时间



我的测试套件中有一些测试,这些测试可以在我所有的同事上运行,但在我身上失败了。那就是以瞬间的形式从不同的实体返回两次,并将它们相互比较。它们实际上匹配,但不适合我。

这是描述的行:

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更详细地解释了使用它的原因。

相关内容

  • 没有找到相关文章