如何模拟导入
模块A
包括import
B
在其顶部。然而在试验条件下,我想嘲笑
B
的A
(模拟A.B
)和进口完全避免B
。
实际上,B
并不是故意在测试环境中安装的。
A
是被测单元。我必须导入A
所有功能。B
是我需要模拟的模块。但我怎么能嘲笑B
之内A
,并停止A
从导入实际B
,如果第一件事情A
确实是进口B
?
(未安装B的原因是我使用pypy进行了快速测试,但不幸的是B尚未与pypy兼容。)
怎么办呢?
-
您可以
sys.modules['B']
在导入之前分配给以A
获取所需的内容: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__)
print
mock_B
。您仍然必须mock_B.py
在模拟B
实际功能/变量/等的地方创建一个。或者,您可以直接分配一个Mock()
:test.py :
import sys sys.modules['B'] = Mock() import A