假设我有function
:
def third_day_from_now():
return datetime.date.today() + datetime.timedelta(days=3)
我想为此功能编写测试?我知道如果今天是25th
,那么函数应该返回28
。
有什么方法我可以强制datetime
对象将current date
作为25
返回吗?
答案 0 :(得分:3)
freezegun
使得模拟日期时非常容易。
from freezegun import freeze_time
@freeze_time("2015-02-25")
def test_third_day_from_now():
assert third_day_from_now() == datetime.datetime(2015, 2, 28)
答案 1 :(得分:1)
更新函数以获取输入日期作为参数(默认值为无)
然后通过参数调用测试函数,即自定义日期和不带参数。
<强>演示强>
>>> def third_day_from_now(input_date=None):
... if input_date:
... return input_date + datetime.timedelta(days=3)
... else:
... return datetime.date.today() + datetime.timedelta(days=3)
...
>>> print "Today + 3:", third_day_from_now()
Today + 3: 2015-07-12
>>> input_date = datetime.datetime.strptime('25-05-2015', "%d-%m-%Y").date()
>>> print "Custom Date:", input_date
Custom Date: 2015-05-25
>>> print "Custom Date + 3:", third_day_from_now(input_date)
Custom Date + 3: 2015-05-28
答案 2 :(得分:0)
不,您不会尝试更改系统时钟,而是可以将功能更改为您可以测试的功能:
def third_day_from(someday):
"""Returns the day three days after someday
:param someday: a datetime to start counting from
"""
return someday + datetime.timedelta(days=3)
def test_third_day(...)
today = datetime(25, 5, 2005)
thirdday = datetime(28, 5, 2005)
self.assertEqual(third_day_from(today), thirdday)