$shibayu36->blog;読者になる$shibayu36->blog;株式会社アンドパッドでエンジニアをしています。プログラミングや読書のことなどについて書いています。2018-01-23Scalaのテスト中にJoda-Timeのnowの時刻を固定するtech今回はScalaのテストの話。時刻まわりが関わる実装をテストしたい時、テスト中だけ現在時刻を固定したり、現在時刻を過去にしたりなどといったことをやりたいことはよくある。Joda-TimeのDateTime.nowを使って現在時刻を取得している場合、時刻をfakeして固定することが出来たのでメモ。固定するにはorg.joda.time.DateTimeUtilsのsetCurrentMillisFixedやsetCurrentMillisProviderを利用する。以下のように時間を固定することができる。2018-01-23T05:58:51.118+09:00これだけでやりたいことは出来たのだけど、テスト用にはユーティリティを作っておくと、さらに便利になる。指定したtimeMillisに時刻を固定する。ブロックを抜けると元に戻る。fake(DateTime.parse(t).getMillis)(block)}fakeを使うとブロック内だけ時刻が固定され、ブロックを抜けるとシステム時間に戻る。ブロック内で返却したものが結果として返ってくる。2018-03-02T12:34:56.000+09:00}便利!ただしDateTimeUtilsを使った書き換えはスレッド共有の空間を書き換えるので、マルチスレッドでテストする時は動かないことに注意しましょう。2リンクプライバシーポリシーはてなブログをはじめよう!shiba_yu36さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。