【发布时间】:2021-04-12 15:20:24
【问题描述】:
请
我正在测试一个使用 LocalDateTime.now() 的功能 ABC。
在方法 ABC 中,我将输入日期与 LocalDateTime.now() 进行比较
我希望我的测试在任何一天都能通过,所以我必须模拟 LocalDateTime.now()
这是我的测试:
public void testClass() {
LocalDateTime mock = Mockito.mock(LocalDateTime.class);
Mockito.doReturn(LocalDateTime.of(2030,01,01,22,22,22)).when(mock).now();
log.info(String.valueOf(LocalDateTime.now()));
myService.ABC();
}
我正在使用 JAVA 8
控制台中显示的日期始终是真实的 LacalDateTime 而不是我想要的 LacalDateTime (2030-01-01)。
我没有收到错误。
有什么帮助吗?
【问题讨论】:
-
如果可能,考虑反转依赖关系:您可以有一个包私有构造函数,该构造函数接受返回
LocalDateTime的供应商,因此可以很容易地模拟(因此该单元使用localDateTimeSupplier.get()你有LocalDateTime.now()目前)。现在您的单元似乎没有它,所以看起来您的测试必须非常了解单元内部结构才能使单元测试工作。模拟静态方法,尤其是那些没有从单元中暴露出来的方法,可能是一个非常错误的方法。 -
仅供参考:
Clock.fixed
标签: java testing mocking mockito powermockito