我有一个我正在测试的模块,它依赖于另一个在测试时无法使用的模块。为了解决这个问题,我写了(基本上):
import mock
import sys
sys.modules['parent_module.unavailable_module'] = mock.MagicMock()
import module_under_test
只要module_under_test
正在执行以下import parent_module
,import parent_module.unavailable_module
之一,此工作正常。但是,以下代码生成回溯:
>>> from parent_module import unavailable_module
ImportError: cannot import name unavailable_module
这是怎么回事?我可以在测试代码中做什么(不更改import语句)以避免此错误?
答案 0 :(得分:3)
好吧,我想我已经明白了。它似乎在声明中:
from parent_module import unavailable_module
Python查找名为parent_module
的{{1}}的属性。因此,以下设置代码完全取代unavailable_module
中的unavailable_module
:
parent_module
我测试了我所知道的四种导入习语:
import mock
import sys
fake_module = mock.MagicMock()
sys.modules['parent_module.unavailable_module'] = fake_module
setattr(parent_module, 'unavailable_module', fake_module)
并且每个都使用上面的设置代码。