我想使用Python的mock模块来mock一个返回外部内容的函数。
但是,我在mock被导入到一个模块中的函数时遇到了一些问题。
例如,在util.py
中:
def get_content():
return "stuff"
我想模拟util.get_content
,使其返回其他内容。
我正在尝试这样做:
util.get_content=Mock(return_value="mocked stuff")
如果 get_content
在另一个模块中被调用,它似乎从来没有返回过模拟对象。我在使用 Mock
方面有什么遗漏吗?
请注意,如果我调用以下内容,则工作正常:
>>> util.get_content=Mock(return_value="mocked stuff")
>>> util.get_content()
"mocked stuff"
然而,如果get_content
被从另一个模块中调用,它会调用原始函数而不是模拟版本:
>>> from mymodule import MyObj
>>> util.get_content=Mock(return_value="mocked stuff")
>>> m=MyObj()
>>> m.func()
"stuff"
mymodule.py
的内容
from util import get_content
class MyObj:
def func():
get_content()
我想问的是,如何在调用模块内部的函数时使用模拟版本?
看起来问题可能出在from module import function
上,它未指向模拟函数。
mymodule.func()
,我仍然得到了正确的答案。对我唯一的区别是我的mymodule.func()
返回util.get_content()
,而不仅仅是调用它。我觉得你的描述中仍然缺少一些信息。你是否真正尝试过你上面的确切描述?你的实际代码是什么? - Nate