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

sr1*_*123 2 java testing mocking mockito powermockito

请,

我正在测试使用 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();
}  
Run Code Online (Sandbox Code Playgroud)

我正在使用 JAVA 8

控制台中显示的日期始终是真正的 LacalDateTime 而不是我想要的 LacalDateTime (2030-01-01) 。

我没有收到错误。

有什么帮助吗?

Yas*_*jaj 5

您应该用于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
}
Run Code Online (Sandbox Code Playgroud)

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