python – 模拟在函数内导入的模块
作者:互联网
是否可以模拟在函数内导入的模块?
例如
def my_func(input):
import something_else
something_else.do_something(input)
由于循环依赖,我在函数内部导入.根据我的谷歌搜索,我认为我是SOL,但想知道是否有人知道如何使这成为可能.
我只想验证do_something是否被调用.
解决方法:
您可以使用与此answer中描述的技术相同的技术.简而言之,您可以修补sys.modules dict.所以你的测试可以是:
from unittest.mock import patch, MagicMock
...
def test_call_do_something(self):
m = MagicMock()
with patch.dict("sys.modules", something_else=m):
input_mock = MagicMock()
my_func(input_mock)
m.do_something.assert_called_with(input_mock)
你可以通过补丁装饰器重写它,但m应该是一个静态实例.
标签:python,unit-testing,mocking,python-mock 来源: https://codeday.me/bug/20190628/1313777.html