freezegun で Python コード内の時間を固定して PyTest を行う2021年01月14日 13時37分51秒

時刻に関する関数は特にテストが難しい。Python には freezegun というライブラリがあり、それで時刻を任意に指定できる。

まずは、pip install で freezegun をインストール。

% pip install freezegun

幾つか使い方はあるが、デコレータ式がテストには便利だろう。

from freezegun import freeze_time
import datetime
import pytest

@freeze_time("2020-01-14")
def test_datetime():
    assert datetime.datetime.now() == datetime.datetime(2020, 1, 14)
一年前の日付でテストをする。

分までの指定。

@freeze_time("2020-01-14 12:34:56")
タイムゾーンを含めた指定も出来る。
@freeze_time("2020-01-14 12:34:56", tz_offset=+9)