joda datetimeテストの心得

1573 ワード

いくつかのビジネスロジックは時間に基づいており、テストが面倒で、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();現在のシステムを復元する時間は通常のシステム時間である.