assertEquals语句中经过的JavaSpring时间

fnx2tebb  于 2023-01-24  发布在  Java
关注(0)|答案(1)|浏览(110)

我的测试套件中有一些测试在我所有的同事身上运行,但是在我身上失败了。那就是从不同的实体以瞬间的形式返回两次,然后相互比较。它们实际上是匹配的,但是对我来说不是。
这是描述的行:

assertEquals(notUpdatedRule.getModStamp(), rule.getModStamp());

作为错误消息,我得到以下信息:

org.opentest4j.AssertionFailedError: 
Expected :2023-01-22T19:46:20.754829Z
Actual   :2023-01-22T19:46:20.754829486Z

我已经尝试过使我的openjdk版本适应我同事的版本,但这并没有改变什么。

qhhrdooz

qhhrdooz1#

我建议您使用Instant.now(Clock clock)。从它的JavaDocs中可以看到:“使用此方法允许使用备用时钟进行测试.”
这些问题可能是由不同的时区、不同的操作系统、系统中计时器的硬件精度不同等引起的。
当您指定一个Clock时,您可以为您的测试创建一个具有定义的精度(毫秒、秒、分钟或任何其他Duration)的Clock
或者您可以提供一个Clock,它总是为您的Clock.fixed(Instant fixedInstant, ZoneId zone)测试返回相同的时刻(我真的建议您进行可重复的测试!)。
对于生产应用,您可以简单地提供一个Clock.systemUTC(),使其具有Instant.now()的当前行为。Clock s JavaDocs更详细地解释了使用它的原因。

相关问题