小编has*_*sam的帖子

仅在一个模块中修补方法

例如,我有一些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

9
推荐指数
1
解决办法
3163
查看次数