如何针对不同的日期测试包含datetime.now()的python方法



我有一些方法使用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

最新更新