我的测试套件中有一些测试在我所有的同事身上运行,但是在我身上失败了。那就是从不同的实体以瞬间的形式返回两次,然后相互比较。它们实际上是匹配的,但是对我来说不是。
这是描述的行:
assertEquals(notUpdatedRule.getModStamp(), rule.getModStamp());
作为错误消息,我得到以下信息:
org.opentest4j.AssertionFailedError:
Expected :2023-01-22T19:46:20.754829Z
Actual :2023-01-22T19:46:20.754829486Z
我已经尝试过使我的openjdk版本适应我同事的版本,但这并没有改变什么。
1条答案
按热度按时间qhhrdooz1#
我建议您使用
Instant.now(Clock clock)
。从它的JavaDocs中可以看到:“使用此方法允许使用备用时钟进行测试.”这些问题可能是由不同的时区、不同的操作系统、系统中计时器的硬件精度不同等引起的。
当您指定一个
Clock
时,您可以为您的测试创建一个具有定义的精度(毫秒、秒、分钟或任何其他Duration
)的Clock
。或者您可以提供一个
Clock
,它总是为您的Clock.fixed(Instant fixedInstant, ZoneId zone)
测试返回相同的时刻(我真的建议您进行可重复的测试!)。对于生产应用,您可以简单地提供一个
Clock.systemUTC()
,使其具有Instant.now()
的当前行为。Clock
s JavaDocs更详细地解释了使用它的原因。