Java コードの一部として、明日 JUnit でいくつかのタスクを実行する必要があります。
たとえば、次の 3 つのタスクがあります。
- task1 - 完了
- task2 - 明日やる
- task3 - これが起こる
したがって、要件に従って、今日の日付をJavaで明日に設定する必要があります。
重要なのは、依存関係として「現在の時刻を取得できるもの」のアイデアを抽出することです。(関連するタイムゾーンとともに。)
new Date()
したがって、使用するか、抽象化System.currentTimeMillis()
を使用する代わりに。Clock
本番コードでは、基になるシステム クロックを使用する this のインスタンスを挿入しますが、テストでは、明示的に制御できる偽のクロックを使用して、必要なものを返すようにします。
(正直に言うと、何を達成しようとしているのか正確にはわかりませんが、このアプローチは、時間をテスト可能にするための私の標準的なアプローチです。)
GitHub の次のコードを検討してください: DateSupplier && DateController。DateSupplier
現在の日付を返す静的メソッドがあります。テスト環境でDateController
返される日付値を操作できます。DateSupplier
それは であり、JUnit Rule
それ自体の後にクリーンアップします。
Clock
これは、他の2つの回答からのアイデアの具体的な実装です。私は自分のプロジェクトでそれを1年ほど使用しており、成功しています。代わりnew Date()
に呼び出すコードがあるときはいつでも。DateSupplier.getCurrentDate()