日付操作をするためのJavaライブラリであるJoda-Time
にはorg.joda.time.DateTimeUtis
にsetCurrentMillisFixed
というメソッドが用意されています。これは、現在日時を任意の値に固定することが出来るもので、現在日時によって動的に処理が変化するコードのテストを楽に実施することができます。
Java 8ではJoda-Timeの有用性が薄れてきたり、新機能のClock使えば同じことができるけれど、ホラ、Java 8が禁止されてたりとか、あ、あるじゃない?
サンプルコード
@Test
public void somethingTest() {
DateTime mockDateTime= new DateTime(2014, 1, 1, 0, 0, 0);
DateTimeUtils.setCurrentMillisFixed(mockDateTime.getMills());
// 現在日時を取得してみると、設定した日時が現在日時として取得される
System.out.println(new DateTime()); // 2014-01-01T00:00:00.000+09:00
// something test code...
}
@After
public void tearDown() {
// 対象のテスト後にはシステム時刻を元に戻して安全性を保つ
DateTimeUtils.setCurrentMillisSystem();
}
参考
DateTimeUtils (Joda-Time 2.5 API)
http://www.joda.org/joda-time/apidocs/org/joda/time/DateTimeUtils.html#setCurrentMillisFixed(long)