Java 如何用Mockito模拟Jodatime 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对象,以便在每次测试中创建一个新的DateTime对象时,我都可以截取它并使它创建一个常量(预先确定的)DateTime对象

在我的实际方法中,我创建的DateTime对象如下所示:

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()