2014-09-19 82 views
0

我想测试一个名为“x”的模块,它导入一个名为“y”的模块。问题是需要几秒钟才能导入y。我该如何编写一个x测试,用我自己的模块替换y,同时防止y被导入?如何在不导入的情况下更换模块?

我知道的所有Python库都允许用户替换模块,因此需要先导入该模块。

回答

2

所以,让我们说我们有这些模块xy

# 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! 
相关问题