【发布时间】:2020-12-22 09:08:26
【问题描述】:
我有一个生成时间戳的模型构造函数
this.timestamp = null == timestamp ? ZonedDateTime.now().toInstant().toEpochMilli() : timestamp;
如何模拟 ZonedDateTime? 我需要使用测试用例验证时间戳的值是当前时间(以毫秒为单位)。
由于它是一个模型,因此无法在构造函数中注入单独的 clock 类的依赖项,我不希望更改源代码。
【问题讨论】:
-
1.为什么不直接使用
Instant.now()而不是ZonedDateTime.now().toInstant()?这将避免一个无用的步骤。 2. 不能直接模拟ZonedDateTime.now()(或Instant.now())。如果您想修改或模拟类似的功能,您可以使用Clock对象并使用任一类的now(Clock)方法而不是无参数的方法。 -
您的时间戳值是最终值吗?你想创建读取对象并只设置这个单个值还是要模拟整个对象?
-
在测试时间相关代码时,您可能需要使用依赖注入来使用模拟
Clock。您不需要模拟框架。见stackoverflow.com/questions/27067049/…