我正在尝试在单元测试中使用 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
unittest.mock
文档,您应该注意修补的内容。
使用
from requests import get
创建原始方法的本地引用(副本)。通过
with mock.patch('requests.get') as get_mock:
您仅修补
requests
模块中的引用,该引用会为您提供所谓的 不一致的结果,因为由 from
句子创建的本地引用保持不变。
本地参考可以通过
patch.object(get)
或 patch('__main__.get')
进行修补。
对于那些过来寻找模拟模块的人
from requests import get
你可以使用
your_module.get
来模拟这个