首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python测试模拟,无法修补在`__init__.py`中导入的` `time`‘模块

Python测试模拟,无法修补在`__init__.py`中导入的` `time`‘模块
EN

Stack Overflow用户
提问于 2016-08-24 14:00:17
回答 1查看 2.1K关注 0票数 0

我在__init__.py文件中有以下代码

代码语言:javascript
复制
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+秒才能完成。

代码语言:javascript
复制
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'

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-25 17:20:57

我所要做的就是

代码语言:javascript
复制
with patch("dir.sleep" ) as tm:

而不是,

代码语言:javascript
复制
with patch("time.sleep") as tm:
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39125440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档