0
我想测试一个名为“x”的模块,它导入一个名为“y”的模块。问题是需要几秒钟才能导入y。我该如何编写一个x测试,用我自己的模块替换y,同时防止y被导入?如何在不导入的情况下更换模块?
我知道的所有Python库都允许用户替换模块,因此需要先导入该模块。
我想测试一个名为“x”的模块,它导入一个名为“y”的模块。问题是需要几秒钟才能导入y。我该如何编写一个x测试,用我自己的模块替换y,同时防止y被导入?如何在不导入的情况下更换模块?
我知道的所有Python库都允许用户替换模块,因此需要先导入该模块。
所以,让我们说我们有这些模块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!