我想测试名为“x”的模块,该模块导入名为“y”的模块。问题是导入y需要几秒钟。如何编写x测试,用自己的模块替换y,同时阻止导入y?
我所知道的所有允许替换模块的Python库都需要先导入模块。
答案 0 :(得分:2)
所以,假设我们有这些模块x
和y
:
# x.py
import y
y.foo()
# y.py
def foo():
raise RuntimeError("Nope.")
鉴于这些模块,以下内容显然会失败:
# test_real.py
import x
$ python test_real.py
Traceback (most recent call last):
File "test_real.py", line 2, in <module>
import x
File "x.py", line 3, in <module>
y.foo()
File "y.py", line 3, in foo
raise RuntimeError("Nope.")
RuntimeError: Nope.
如果我们有假y
(称为z
):
# z.py
def foo():
print "Yessir!"
...我们需要在导入x
之前说服Python,,y
已导入(用z
替换它)。这其实很简单:
# test_fake.py
import sys
sys.modules['y'] = __import__('z')
import x
......它有效:
$ python test_fake.py
Yessir!