java:如何模拟 Calendar.getInstance()?
在我的代码中,我有这样的东西:
private void doSomething() {
Calendar today = Calendar.getInstance();
....
}
我如何在我的 junit 测试中“嘲笑”它以返回特定日期?
在我的代码中,我有这样的东西:
private void doSomething() {
Calendar today = Calendar.getInstance();
....
}
我如何在我的 junit 测试中“嘲笑”它以返回特定日期?
你可以将PowerMock与Mockito结合使用来模拟它:
在你的班级之上:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassThatCallsTheCalendar.class})
成功的关键是,你必须把你使用日历的类放在PrepForTest中,而不是日历本身,因为它是一个系统类。
然后是嘲笑本身:
mockStatic(Calendar.class);
when(Calendar.getInstance()).thenReturn(calendar);
在我看来,您有三个明智的选择:
将实例注入您当天设置的任何方法/类中。Calendar
private void method(final Calendar cal)
{
Date today = cal.getTime();
}
使用 JodaTime 而不是 .这与其说是一种选择,不如说是一个建议,因为JodaTime会让你的生活更轻松。您仍然需要将这段时间注入到方法中。Calendar
DateTime dt = new DateTime();
Date jdkDate = dt.toDate();
包装在一些允许您获取时间的界面中。然后,您只需模拟该接口并使其返回常量。Calendar
Date
Date today = calendarInterfaceInstance.getCurrentDate()