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

How to mock LocalDateTime.now() in java 8

拜托,

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

我没有收到错误。

有什么帮助吗?

对于此用例,您应该使用 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时,它将执行class的真实方法。