触发importterror来测试回退代码的覆盖率



给定somemod.py中的代码:

try:
    Import cStringIO as StringIO
except ImportError:
    import StringIO

如何测试"回退"分支?

(用例:试图达到100%的覆盖率。同意这是一个有点傻的目标:))

:

  1. 代码从test_somemod.py运行,import somemod
  2. 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

最新更新