Я использую python 2.7.15rc1 .Я пытаюсь смоделировать итератор, чтобы он генерировал исключение при итерации по нему.Например:
elements = [1,2,3,Exception('boom!')]
iterable = <create a mock iterable to iterate over "elements">
# this does not print anything.
for value in iterable:
...
Я пытался использовать атрибут side_effect
в методе next()
экземпляра MagicMock
, например так:
from mock import MagicMock
mocked_next = MagicMock()
mocked_next.next.side_effect = [1,2,3,Exception('boom!')]
mocked_iterable = MagicMock()
mocked_iterable.__iter__.return_value = mocked_next
...
# This does not print anything and no exception is raised
for value in mocked_iterable:
print(value)
Я предположил, что *Цикл 1012 * в конечном итоге вызовет __iter__
для mocked_iterable
, который вернет другой фиктивный объект с атрибутом next
, имеющим side_effect
.Я ожидал, что цикл в итоге вызовет mocked_next.next()
, который будет повторять список, который я ему предоставил в side_effect
.
Очевидно, мое понимание неверно.Что мне здесь не хватает?Может ли это быть достигнуто исключительно с помощью mock, или мне нужно создать собственный итератор для реализации этого поведения?
EDIT: Я пытаюсь протестировать часть обработки исключений частикод, который выполняет итерацию и, следовательно, пытается эмулировать итератор, выдавая исключение.