给定somemod.py
中的代码:
try:
Import cStringIO as StringIO
except ImportError:
import StringIO
如何测试"回退"分支?
(用例:试图达到100%的覆盖率。同意这是一个有点傻的目标:))
:
- 代码从
test_somemod.py
运行,import somemod
- Python中的Mocking ImportError涵盖了其中的一些内容,但是很复杂!
首先,创建用于测试的函数:
>>> def somecode():
... try:
... import cStringIO as StringIO
... print 'got cStringIO'
... except ImportError:
... import StringIO
... print 'got StringIO'
>>> somecode()
got cStringIO
现在,正如这里所解释的,您可以钩入到导入函数:
>>> 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