I am trying to Mock
a function (that returns some external content) using the python mock module.
I'm having some trouble mocking functions that are imported into a module.
For example, in util.py
I have
def get_content():
return "stuff"
I want to mock util.get_content
so that it returns something else.
I am trying this:
util.get_content=Mock(return_value="mocked stuff")
If get_content
gets invoked inside another module, it never actually seems to return the mocked object. Am I missing something in terms of how to use Mock
?
Note that if I invoke the following, things work correctly:
>>> util.get_content=Mock(return_value="mocked stuff")
>>> util.get_content()
"mocked stuff"
However, if get_content
is called from inside another module, it invokes the original function instead of the mocked version:
>>> from mymodule import MyObj
>>> util.get_content=Mock(return_value="mocked stuff")
>>> m=MyObj()
>>> m.func()
"stuff"
Contents of mymodule.py
from util import get_content
class MyObj:
def func():
get_content()
So I guess my question is - how do I get invoke the Mocked version of a function from inside a module that I call?
It appears that the from module import function
may be to blame here, in that it doesn't point to the Mocked function.
mymodule.func()
. The only difference for me was that mymymodule.func()
return
sutil.get_content()
, and doesn't just call it. I feel like there must still be some information missing in your description. Have you actually tried your exact description above? What is your actual code? – Nate