Java 测试包含日期字段的对象
我有一个类,它有一个Bill生成的方法。我有一个DateUtil组件来创建日期Java 测试包含日期字段的对象,java,spring,testing,Java,Spring,Testing,我有一个类,它有一个Bill生成的方法。我有一个DateUtil组件来创建日期 public Bill generateBill(List<ProvidedItem> providedItems) { Bill bill = new Bill(); Date date = dateUtil.now(); bill.setStartDate(date); bill.setEndDate(dateUtil.plusDays(date, Constant
public Bill generateBill(List<ProvidedItem> providedItems) {
Bill bill = new Bill();
Date date = dateUtil.now();
bill.setStartDate(date);
bill.setEndDate(dateUtil.plusDays(date, ConstantValues.DEFAULT_DURATION_BILL_DAYS));
return billDao.saveOrUpdate(bill);
}
比尔妈妈:
public static Bill createTestInstanceWithAmount(BigDecimal totalAmount, Date startDate, Date endDate) {
Bill bill = new Bill();
bill.setStartDate(startDate);
bill.setEndDate(endDate);
bill.setTotalAmount(totalAmount);
return bill;
}
我有不同的对象,因为日期是在另一个时间调用的
我不能在Equals方法中跳过这些日期,因为它们是这个对象最重要的部分之一
如何使其在这种情况下正常工作?如果唯一使您无法成功测试该方法的因素是日期字段,那么您可以使用actualBill的开始和结束日期来设置测试实例的开始和结束日期,这是假设您的Bill类具有这两个字段的getter 哦,还有一点建议,我想你要比较的是对象的内容,而不是对象本身。因为,除非您特别重写Bill类中的equals()方法,否则只有当两个Bill引用引用相同的对象时,它们才会相等 一个可能的解决方案是,正如我所说的,重写类Bill中的equals()方法,如下所示:
@override public boolean equals(Object o){
return o.instanceof(Bill) &&
o.getStartDate().equals(startDate) &&
o.getEndDate().equals(endDate) &&
o.getTotalAmount()==totalAmount;
}
最后一件事,我会考虑使用java。时间库,因为它提供了比那些“旧”库更为新近、更有用和更有效的一组。可以使用LocalDate而不是Date。使用Mockito:
@Mock DateUtil dateUtil
when(dateUtil.now()).thenReturn(NOW);
您可以使用mockito模拟dateUtil(如上面的答案所示)
when(dateUtil.now()).thenReturn(newdate())代码>
或
您可以使用powerMockito模拟日期实例化
whenNew(Date.class).withNoArguments()。然后return(new Date())代码> 如果你认为你的方法是非静态的,这将允许你对行为进行简单的嘲讽。它对测试方法中的所有日期都有效。但是在测试的方法中调用dateUtil.Now()
不再有效。所以它不再解决问题了。我做错什么了吗?Bill actualBill=billService.generateBill(actualProvidedItems)代码>内部的此代码段将生成不同的日期
@Mock DateUtil dateUtil
when(dateUtil.now()).thenReturn(NOW);