[英]Mocking datetime.now(); mock object isn't recognized as a class
我试图模拟datetime.now()的输出以模拟时间的流逝。 这是我想要做的:
from datetime import datetime, timedelta
from mock import Mock, patch
from other_module import some_code
tomorrow = Mock(spec=datetime)
tomorrow.now = Mock(return_value=datetime.now() + timedelta(days=1))
with patch('other_module.datetime', tomorrow):
some_code()
它将正常工作,除非some_code()
使用croniter库,该库专门将datetime.datetime
类作为输入并检查它是否是datetime.datetime
的子类。 这是我遇到的问题; 虽然datetime.datetime是一个类,但我的模拟不是; issubclass
方法无法将其识别为类类型。
如何确保我的模拟对象被识别为类?
我不熟悉croniter,但freezegun可能与这-它补丁的所有引用,以帮助datetime.datetime
与实例freezegun.api.FakeDatetime
,所以内some_code()
任何datetime.datetimes
应该使用的实例freezegun.api.FakeDatetime
。 从经验上来讲,如果您尝试使用freezegun来模拟时间的流逝,那么间歇性的测试失败也会使您免于头痛。
from datetime import datetime, timedelta
from freeze_gun import freeze_time
from other_module import some_code
fake_today = datetime.datetime(2017, 7, 11)
with_freeze_time(fake_today):
some_code()
# simulate passage of time to tomorrow
with_freeze_time(fake_today + timedelta(days=1))
some_code()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.