在以下设置下
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class myTest {
我在我的src上有这个
DateFormat dataformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentdate = dataformat.format(new Date());
我知道将调用Date.getTime()方法。
我在测试代码上尝试了这个。
final Date date = Mockito.mock(Date.class);
Mockito.when(date.getTime()).thenReturn(dateLongValue);
但什么都没发生。 我也试过像这样的模拟
Mockito.when(date.format(new Date())).thenReturn(dateStringValue);
但得到了
java.lang.NullPointerException
at java.text.DateFormat.format(DateFormat.java:346)
这可能很容易,但我没有运气。任何建议都将不胜感激。
答案 0 :(得分:1)
您正在使用麻烦的旧遗留日期时间类,现在由java.time类取代。
Clock
java.time类允许您传递Clock
的替代实现以进行测试。
Clock
甚至还附带了一些已经为您构建的备用实现。人们可以冻结到特定的固定时刻。另一个保留时间但从实际时间偏移指定的数量。其他人按整秒或整分钟或您指定的任何金额递增。
答案 1 :(得分:0)
执行此操作的“正确”方法:编写可测试代码。直接调用 new 有时会导致难以测试的代码。然后人们需要拔出大型PowerMock(ito)锤子来解决这个问题。
或者,考虑学习如何编写可测试的代码;从here开始。
在您的情况下,您可以在生成“当前”日期对象的测试下为您的代码提供一个小工厂。您使用依赖注入将该工厂放入您正在测试的类中;为了测试,你嘲笑那个工厂。导致零需要模拟对 new 的调用。