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

时间:2017-07-13 00:24:43

标签: python

我正在尝试模拟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方法识别为类类型。

如何确保我的模拟对象被识别为类?

1 个答案:

答案 0 :(得分:3)

我不熟悉croniter,但是freezegun可能会对此有所帮助 - 它会对datetime.datetime的{​​{1}}实例进行补丁,因此在freezegun.api.FakeDatetime内,任何some_code()都应使用datetime.datetimes的实例。根据经验,如果您使用冻枪,在尝试模拟时间的推移时,您还可以避免许多令人头疼的间歇性测试失败。

freezegun.api.FakeDatetime