4

我有一个正在测试的模块依赖于另一个在测试时不可用的模块。为了解决这个问题,我(基本上)写道:

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

这是怎么回事?我可以在我的测试代码中做什么(不更改导入语句)以避免此错误?

4

1 回答 1

3

好吧,我想我已经想通了。在声明中似乎:

from parent_module import unavailable_module

Python 查找被调用的属性。因此,以下设置代码完全替换inside :parent_moduleunavailable_moduleunavailable_moduleparent_module

import mock
import sys

fake_module = mock.MagicMock()
sys.modules['parent_module.unavailable_module'] = fake_module
setattr(parent_module, 'unavailable_module', fake_module)

我测试了我知道的四个导入习语:

import parent_module
import parent_module.unavailable_module
import parent_module.unavailable_module as unavailabe_module
from parent_module import unavailable_module

并且每个都使用上述设置代码。

于 2013-02-04T18:59:28.737 回答