使用 `from X import y` 的 Python 模拟

问题描述 投票:0回答:2

我正在尝试在单元测试中使用 Python 的

mock
库,但根据我导入要修补的目标的方式,我看到的结果不一致。我希望这两个打印语句都应该返回
False
但似乎只有第二个语句返回
False
:

from requests import get
import requests

with mock.patch('requests.get') as get_mock:
    get_mock.return_value.ok = False
    print get('http://asdf.com').ok
    print requests.get('http://asdf.com').ok
python python-unittest python-mock
2个回答
2
投票

根据 Where to patch

unittest.mock
文档,您应该注意修补的内容。

使用

from requests import get

创建原始方法的本地引用(副本)。通过

with mock.patch('requests.get') as get_mock:

您仅修补

requests
模块中的引用,该引用会为您提供所谓的 不一致的结果,因为由
from
句子创建的本地引用保持不变。

本地参考可以通过

patch.object(get)
patch('__main__.get')
进行修补。


0
投票

对于那些过来寻找模拟模块的人

from requests import get

你可以使用

your_module.get

来模拟这个
© www.soinside.com 2019 - 2024. All rights reserved.