有些业务逻辑是基于时间的,测试起来比较麻烦,如果用joda datetime就很容易了
比如: 在new Report中有这样的逻辑:
public Report(double energyTotal, double outputEnergy, double outputpower, String clientId, ReportQueryType type) {
this.clientId = clientId;
this.energyTotal = energyTotal;
this.outputEnergy = outputEnergy;
this.outputpower = outputpower;
this.reportDate = DateTime.now().withTimeAtStartOfDay().getMillis();
this.monitorDate = DateTime.now().getMillis();
this.reportType = type.toValue();
}
字段的赋值用的是系统当前时间, 如何测试?
用joda datetime 时可以这样
// given
DateTime date = now().withTimeAtStartOfDay();
List<Report> hourlyReports = newArrayList();
setCurrentMillisFixed(date.withHourOfDay(1).getMillis());
hourlyReports.add(buildSimpleReport("inverter1", 200, 20, 10, DATE_TREND));
setCurrentMillisFixed(date.withHourOfDay(2).getMillis());
hourlyReports.add(buildSimpleReport("inverter1", 201, 21, 11, DATE_TREND));
setCurrentMillisFixed(date.withHourOfDay(3).getMillis());
hourlyReports.add(buildSimpleReport("inverter1", 202, 22, 12, DATE_TREND));
setCurrentMillisSystem();
注意这里
setCurrentMillisFixed(......);指定当前系统时间的值
setCurrentMillisSystem();恢复当前系统时间为正常的系统时间.