我在__init__.py文件中有以下代码
from time import sleep
from functools import wraps
def multi_try(func):
@wraps(func)
def inner(*args, **kwargs):
count = 0
while count < 5:
resp = func(*args, **kwargs)
if resp.status_code in [200, 201]:
return resp
sleep(1)
count += 1
return inner在为上面的装饰器编写测试时,我无法正确地修补time.sleep。
请参阅下面的测试,尽管我已经修补了时间模块,但装饰器内部的睡眠函数仍在被调用,因此测试用例需要5+秒才能完成。
def test_multi_try_time():
with patch("time.sleep") as tm:
mocker = MagicMock(name="mocker")
mocker.__name__ = "blah"
resp_mock = MagicMock()
resp_mock.status_code=400
_json = '{"test":"twist"}'
resp_mock.json=_json
mocker.return_value = resp_mock
wrapped = multi_try(mocker)
resp = wrapped("p", "q")
assert mocker.call_count == 5
mocker.assert_called_with('p', 'q')
assert resp == None我也试过这个,
with patch("dir.__init__.time" ) as tm:
和
with patch("dir.utils.time" ) as tm:
这导致
AttributeError: <module 'dir/__init__.pyc'> does not have the attribute 'time'
发布于 2016-08-25 17:20:57
我所要做的就是
with patch("dir.sleep" ) as tm:而不是,
with patch("time.sleep") as tm:https://stackoverflow.com/questions/39125440
复制相似问题