テストで特定の日付にシステム クロックを設定する必要があります。このようにして、テストでその日に発生する動作をシミュレートする必要があります。この記事を見つけましたhttp://www.javapractices.com/topic/TopicAction.do?Id=234
しかし、2.5.2013 などの偽のシステム クロックを設定する方法についてはあまりヒントがありません。
私を助けてください。
テストで特定の日付にシステム クロックを設定する必要があります。このようにして、テストでその日に発生する動作をシミュレートする必要があります。この記事を見つけましたhttp://www.javapractices.com/topic/TopicAction.do?Id=234
しかし、2.5.2013 などの偽のシステム クロックを設定する方法についてはあまりヒントがありません。
私を助けてください。
テストの時間を操作する必要があり、システムクロックを実際には変更しないと仮定すると... Joda-Timeの使用を検討してください。これには機能が組み込まれています。
// always return the same time when querying current time
DateTimeUtils.setCurrentMillisFixed(millis);
// then test
assert new DateTime().getMillis() == millis;
// reset time
DateTimeUtils.setCurrentMillisSystem()
ただし、Joda-Time を使用することと、ソリューションを自分で実装することのトレードオフを比較検討する必要があります。
一般に、システムの日時を操作することは良い習慣ではありません。ユニットテストを実行するたびに、私の見通しがおかしくなり、過去からのあらゆる種類のリマインダーがどのようにポップアップしたかを今でも覚えています。
環境に応じて日時を返す静的クラスを作成できるため、テスト Env. 実際の実行中にアクセスできるdatetimeを設定できるようになり、システムの日付/時刻が返されます。
しかし、2.5.2013 などの偽のシステム クロックを設定する方法についてはあまりヒントがありません。
します。手順に従って、システム時間へのすべての呼び出しをインターフェイスに置き換えたと思います(TimeSource
たとえば)。特定の日付をシミュレートする必要がある場合は、テスト クラスで次の実装を使用できます。
public final class TestTimeSrc implements TimeSource {
public long currentTimeMillis() {
Calendar calendar = Calendar.getInstance();
calendar.set(2013, 4, 2);
return calendar.getTime().getTime();
}
}