我当前正在尝试模拟DateTime对象,以便我可以在我的测试中制作新的DateTime对象,并使其拦截它并使其创建一个常数(预定的)DateTime对象。p>在我的实际方法中,我正在创建这样的日期对象:
DateTime start = new LocalDateTime().toDateTime().minusHours(1)
DateTime end = new LocalDateTime().toDateTime()
现在,我嘲笑LocalDateTime对象和DateTime对象,但不确定如何进行:
@Mock
DateTime dt;
@Mock
LocalDateTime ldt;
@Test
public void test() {
when(new DateTime()).thenReturn( ???? ); // Stuck here.
when(new LocalDateTime().toDateTime()).thenReturn(dt);
}
任何帮助将不胜感激。谢谢!
您无法使用Mockito模拟静态方法调用(或构造函数调用);您可以使用PowerMock,但这可能是错误的方法。
您可能需要考虑使用DateTimeUtils.setCurrentMillis*
方法来控制Jodatime当前时间的概念。例如,您可以使时间固定。这样做的缺点是它正在突变全球状态,因此可能会产生意想不到的影响。您还需要确保在测试后重置当前的Millis提供商。
但是,一个更好的解决方案是使用依赖项注入,因此您将某物注入到正在测试的类中,这使您可以创建DateTime
的实例,例如Supplier<DateTime>
,因此您调用非静态supplier.get()
而不是new DateTime()
。