Python で時刻関係のテストをするなら time-machine

スクリプト
スポンサーリンク

Python で時間を扱うコードのテストを書いてハマったので対策を紹介します.

スポンサーリンク

結論

結論としては,何も考えずにtime-machineを使うのがおすすめです.

検証

同一の時刻操作を,time-machine と freezegun それぞれで行う下記のようなテストコードを準備します.

Pytest で実行した結果がこちら.

「Now (native)」の結果が,違っていることがわかります. test_time_machine の方は期待値と一致しますが,test_freezegun の方は, JST タイムゾーンなのに UTC の値が取れてしまっています.この挙動を理解せずに freezegun を使うと,テスト対象のコードがおかしいのか,テストコードがおかしいのか混乱してしまうことになります.

注意点

time-machine の紹介ページでは,freezegun や python-libfaketime と比較した欠点として CPython でしか使えないことが挙げられています.それに該当するケースの場合はまた別の対応必要になります.

コメント