Запустите ImportError для проверки покрытия кода возврата - PullRequest
3 голосов
/ 15 сентября 2011

Код, подобный этому, в somemod.py:

try:
    Import cStringIO as StringIO
except ImportError:
    import StringIO

Как можно проверить ветку 'fallback'?

(Вариант использования: попытка достичь 100% охвата. Согласился, что это немного глупо :))

Осложнения

  1. код начинается с test_somemod.py, который имеет import somemod
  2. Mocking ImportError в Python покрывает часть этого, но сложна!

1 Ответ

2 голосов
/ 15 сентября 2011

Сначала создайте функцию для тестирования:

>>> 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
...