如何在 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的真实方法。
拜托,
我正在测试使用 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的真实方法。