Java
JUnit
JodaTime

Joda-Timeを使っているコードで現在日時を任意の値に設定してテストする

More than 3 years have passed since last update.

日付操作をするためのJavaライブラリであるJoda-Timeにはorg.joda.time.DateTimeUtissetCurrentMillisFixedというメソッドが用意されています。これは、現在日時を任意の値に固定することが出来るもので、現在日時によって動的に処理が変化するコードのテストを楽に実施することができます。

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)