如何在 Java 8 中模拟 LocalDateTime.now()

请,

我正在测试使用 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) 。

我没有收到错误。

请问有什么帮助吗?

stack overflow How to mock LocalDateTime.now() in java 8
原文答案
author avatar

接受的答案

您应该在此用例中使用 Mockito#mockStatic

你可以这样使用

try(MockedStatic<LocalDateTime> mock = Mockito.mockStatic(LocalDateTime.class, Mockito.CALLS_REAL_METHODS)) {
    doReturn(LocalDateTime.of(2030,01,01,22,22,22)).when(mock).now();
    // Put the execution of the test inside of the try, otherwise it won't work
}

请注意 Mockito.CALLS_REAL_METHODS 的使用情况,它将保证每当使用另一种方法调用 LocalDateTime 时,它将执行类的真实方法。


答案: