調べても目的のものが見つからなかったのでメモ。
Calendarのインスタンス生成時に指定時刻に設定したい。
JMockitとか使って無理やりやっちゃってます。
モック自体が無理やりな感じだしこれでいっかなぁ。
------------------------------------------------------------------------------------
// Calendarクラスのインスタンスを生成するメソッドを取得(getInstanceの中身)
Method method = Calendar.class.getDeclaredMethod("createCalendar", TimeZone.class, Locale.class);
method.setAccessible(true);
// Calendar.getInstance()を実行した際に指定した時刻を返すようにモック化
Calendar expected = (Calendar) method.invoke(Calendar.class, TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
expected.setTime(new Date(1498835040000L)); // Unixミリ秒で時刻を設定
new MockUp<Calendar>() {
@Mock
public Calendar getInstance() {
return expected;
}
};
------------------------------------------------------------------------------------
// テスト対象の例(現在時刻に対して時刻調整をする)
------------------------------------------------------------------------------------
Calendar cal = Calendar.getInstance();log.info("初期値:" + cal.toString());
// 時刻を調整
cal.add(Calendar.MINUTE, Integer.parseInt(adjustedTime));
log.info("変更値:" + cal.toString());
------------------------------------------------------------------------------------