我有一些方法使用datetime
库中的datetime.datetime.now()
。我想为这些方法编写单元测试,就好像now()
是几个不同的时间(例如,一个月的第5天,一个月中的第15天(。
例如,假设我有这个方法(实际上只是一个例子,我没有这样的方法(
import datetime
def days_left_this_month():
return 30 - datetime.datetime.now().day
我想在本月5日测试这种方法,即:如果now()
在本月的5日,则为days_left_this_month() == 25
。
最好的方法是什么?
您可以使用freezegun
:
from freezegun import freeze_time
import datetime
import unittest
@freeze_time("2019-10-05")
def test():
assert datetime.datetime.now() == datetime.datetime(2019, 10, 05)
例如测试days_left_this_month
:
def days_left_this_month():
return 31 - datetime.datetime.now().day
我们可以:
@freeze_time("2019-10-05")
def test():
assert days_left_this_month() == 26
def test_multiple():
with freeze_time(x):
assert days_left_this_month() == y
with freeze_time(x):
assert days_left_this_month() == y
with freeze_time(x):
assert days_left_this_month() == y
with freeze_time(x):
assert days_left_this_month() == y