例如,我有一些foo.py带有以下代码的 module( ):
import requests
def get_ip():
return requests.get('http://jsonip.com/').content
Run Code Online (Sandbox Code Playgroud)
和bar.py具有类似代码的模块:
import requests
def get_fb():
return requests.get('https://fb.com/').content
Run Code Online (Sandbox Code Playgroud)
我只是不明白为什么接下来会发生:
from mock import patch
from foo import get_ip
from bar import get_fb
with patch('foo.requests.get'):
print(get_ip())
print(get_fb())
Run Code Online (Sandbox Code Playgroud)
他们两个被嘲笑:
<MagicMock name='get().content' id='4352254472'>
<MagicMock name='get().content' id='4352254472'>
似乎只修补foo.get_ip方法with patch('foo.requests.get'),但事实并非如此。我知道我可能会bar.get_fb超出with范围进行调用,但在某些情况下,我只在上下文管理器中运行一种调用许多其他方法的方法,并且我只想requests在一个模块中进行修补。有什么办法可以解决这个问题吗?不改变模块中的导入
python python-3.x python-mock python-unittest python-unittest.mock