Kotest Test Clock拡張
Test Clock拡張について説明する。
JVMは、インスタンスを生成するために使用されるjava.time.Clockインターフェースを提供する。時間に依存するコードがある場合、Instant.now()やSystem.currentTimeMillis()のようなものを使う代わりに、Clockを使って値を生成できる。
その後、テストでは固定または制御可能な時計を提供し、テストが実行されるたびに時間が変わる問題を避けられる。実際のコードでは、Clock.systemUTC()などのインスタンスを提供すればよい。
NOTE
次のモジュールが必要である: ビルドに`io.kotest.extensions:kotest-extensions-clock`。最新バージョンはMaven Centralで検索する。
これを使用するには、インスタントとゾーンオフセットを渡してTestClockのインスタンスを作成する。
val timestamp = Instant.ofEpochMilli(1234)
val clock = TestClock(timestamp, ZoneOffset.UTC)
次のように、期間を受け付けるplus、minusを通じてclockを制御できる。
clock.plus(6.minutes)
時計は変更可能であり、plusまたはminusを使用すると内部状態が変更される点に注意する必要がある。