Java 如何用Mockito模拟Jodatime DateTime
我目前正在尝试模拟一个DateTime对象,以便在每次测试中创建一个新的DateTime对象时,我都可以截取它并使它创建一个常量(预先确定的)DateTime对象 在我的实际方法中,我创建的DateTime对象如下所示:Java 如何用Mockito模拟Jodatime DateTime,java,junit,mockito,jodatime,Java,Junit,Mockito,Jodatime,我目前正在尝试模拟一个DateTime对象,以便在每次测试中创建一个新的DateTime对象时,我都可以截取它并使它创建一个常量(预先确定的)DateTime对象 在我的实际方法中,我创建的DateTime对象如下所示: DateTime start=new LocalDateTime().toDateTime().minusHours(1) DateTime end=new LocalDateTime().toDateTime() 现在,我正在模拟LocalDateTime对象和DateTim
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,但是这可能是错误的方法
您可能想考虑使用JordaMi控制当前时间的概念。例如,您可以使时间固定。这样做的缺点是它正在改变全局状态,因此可能会产生意想不到的影响;您还需要确保在测试后重置当前的millis提供程序
但是,更好的解决方案是使用依赖项注入,因此您可以向被测类中注入一些东西,从而允许您创建DateTime
的实例,例如Supplier
,因此您可以调用非静态Supplier.get()
,而不是newdatetime()