2017-09-15 87 views
-4

我当前正在尝试模拟DateTime对象,以便可以拦截它并使其每次在测试中创建一个新的DateTime对象时创建一个常量(预定的)DateTime对象。眼下如何使用Mockito模拟Jodatime DateTime

DateTime start = new LocalDateTime().toDateTime().minusHours(1)

DateTime end = new LocalDateTime().toDateTime()

,我嘲讽LocalDateTime对象和DateTime对象,但我不知道如何:

在我实际的方法,我创建DateTime对象这样继续:

@Mock 
DateTime dt; 

@Mock 
LocalDateTime ldt; 

@Test 
public void test() { 
    when(new DateTime()).thenReturn(????); // Stuck here. 
    when(new LocalDateTime().toDateTime()).thenReturn(dt); 
} 

任何帮助,将不胜感激。谢谢!

回答

0

你不能用Mockito模拟静态方法调用(或构造函数调用)你可以用Powermock,但是这可能是错误的方法。

您可能想要考虑使用DateTimeUtils.setCurrentMillis* methods来控制Jodatime当前时间的概念。例如,你可以使时间固定。这样做的缺点是它正在改变全局状态,因此可能会有意想不到的效果;您还需要确保在测试后重置当前millis提供商。

然而,一个更好的解决方案是使用依赖注入,所以你注入东西进级下测试,它允许你创建的DateTime,例如实例一个Supplier<DateTime>,所以你调用非静态的supplier.get()而不是new DateTime()