2011-09-15 95 views

回答

1

首先,創建一個用於測試使用的功能:

>>> def somecode(): 
... try: 
...  import cStringIO as StringIO 
...  print 'got cStringIO' 
... except ImportError: 
...  import StringIO 
...  print 'got StringIO' 
>>> somecode() 
got cStringIO 

現在,作爲解釋here,您可以鉤到導入功能:

>>> import __builtin__ 
>>> original_import = __builtin__.__import__ 
>>> def import_hook(name, *args, **kwargs): 
... if name == 'cStringIO': raise ImportError('test case module import failure') 
... else: return original_import(name, *args, **kwargs) 
... 
>>> 
>>> __builtin__.__import__ = import_hook 
>>> somecode() 
got StringIO 

測試用例後,你應該把它放回去:

>>> __builtin__.__import__ = original_import 
+0

要獲得額外的信用,任何方式獲得m ock.patch只涉及特定的測試用例嗎? –

+0

嗯,從來沒有使用過mock.patch,但是應該很容易將它變成一個裝飾器,你可以給它一個模塊列表,在輸入時隱藏,在退出時退出。 – jterrace

+1

到目前爲止,它似乎像導入醜陋周圍一些醜陋。我真正的解決方案是使用「#pragma:no cover」使coverage.py忽略它!我將不得不挖掘我的經驗。 –