joda datetimeテストの心得
1573 ワード
いくつかのビジネスロジックは時間に基づいており、テストが面倒で、joda datetimeを使うと簡単です.
例えば、new Reportには次のような論理があります.
フィールドの割り当てには、システムの現在の時間が使用されます.どのようにテストしますか?
joda datetimeを使う場合はこのようにすることができます
ここに注意
setCurrentMillisFixed(......);現在のシステム時間の値の指定
setCurrentMillisSystem();現在のシステムを復元する時間は通常のシステム時間である.
例えば、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();現在のシステムを復元する時間は通常のシステム時間である.