编程语言
首页 > 编程语言> > python – 模拟在函数内导入的模块

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