我在 Django 中解决了一些日期模拟问题,最后的障碍(我希望)是以下情况。我有一个 FakeDate 类,它派生自datetime.date
,它模拟出来。
FakeDate 类按预期工作,但是在将 a 添加datetime.timedelta
到 FakeDate 时出现问题,因为它返回一个真实的datetime.date
,而不是模拟的。这很重要,因为在第三方库的其他地方有一个isinstance(value, datetime.date)
检查,使用 timedelta 时总是会失败。
>>> import mock
>>> import datetime
>>>
>>> class FakeDate(datetime.date):
... @classmethod
... def today(cls):
... return cls(1999, 12, 31)
...
>>> FakeDate.today()
FakeDate(1999, 12, 31)
>>> FakeDate(2000, 1, 1)
FakeDate(2000, 1, 1)
>>> FakeDate(1999, 12, 31) + datetime.timedelta(days=1)
datetime.date(2000, 1, 1)
我希望 FakeDate + timedelta 添加返回 FakeDate 对象而不是 datetime.date 对象 - 我想这涉及以某种方式修补 timedelta - 但我如何/在哪里可以做到这一点?