我一直在解决Django中的日期模拟问题,现在遇到了最后一个(希望如此)困难的情况。我有一个FakeDate类,它派生自datetime.date
,并进行模拟。
这个FakeDate类按预期工作,但是当我将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进行某种修补 - 但是我应该在哪里进行修补呢?