模块 A
在其顶部包含 import B
。但是在测试条件下我想mock A
中的 B
(模拟 A.B
)并完全避免导入 B
。
其实B
并不是故意安装在测试环境中的。
A
是被测单元。我必须导入 A
及其所有功能。 B
是我需要模拟的模块。但是,如果第一件事 A
是 import B
?
(未安装B的原因是我使用pypy进行快速测试,不幸的是B还与pypy不兼容。)
这是怎么做到的?
最佳答案
您可以在导入 A
之前分配给 sys.modules['B']
以获得您想要的:
test.py:
import sys
sys.modules['B'] = __import__('mock_B')
import A
print(A.B.__name__)
A.py:
import B
注意 B.py 不存在,但是运行 test.py
时不会返回错误并且 print(A.B.__name__)
打印 mock_B
.您仍然需要创建一个 mock_B.py
来模拟 B
的实际函数/变量/等。或者你可以直接分配一个 Mock()
:
test.py:
import sys
sys.modules['B'] = Mock()
import A
关于python - 如何模拟导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8658043/