是否可以模拟在函数内部导入的模块?
例如
def my_func(input):
import something_else
something_else.do_something(input)
由于循环依赖,我在函数内部导入了一个。基于我的谷歌搜索,我认为我是SOL,但想知道是否有人知道如何使这成为可能。
我只是想验证do_something是否被调用。
答案 0 :(得分:3)
您可以使用与此answer中描述的相同技术。简而言之,您可以修补sys.modules
字典。所以你的测试可以是:
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)
您可以通过patch
装饰器重写它,但m
应该是一个静态实例。