问题
I am trying to use Python's mock library in my unit testing but I am seeing inconsistent results depending on how I import the target that I am trying to patch. I would expect that both of these print statements should return False but it appears that only the second statement returns 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
回答1:
According to Where to patch unittest.mock documentation you should pay some attention about what you patch.
Use
from requests import get
create a local reference (a copy) of the original method. By
with mock.patch('requests.get') as get_mock:
you patch just the reference in requests module that give to you so called inconsistent results because the local reference created by from sentence remain untouched.
The local reference can be patched by patch.object(get) or patch('__main__.get').
来源:https://stackoverflow.com/questions/28546137/python-mock-with-from-x-import-y