如何使用Mockito模拟Jodatime DateTime



我当前正在尝试模拟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()

相关内容

  • 没有找到相关文章

最新更新