繁体   English   中英

模拟datetime.now(); 模拟对象未被识别为类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM