Что-то не соображу, как замокать метод `Queue.__next__`:
from unittest.mock import MagicMock
class Queue:
def __init__(self):
self.nums = [1, 2, 3] # имитация очереди ibm mq
def __iter__(self):
return self
def __next__(self):
try:
num = self.nums.pop()
except Exception:
raise StopIteration
return num
class Consumer:
def __init__(self, queue):
self._queue = queue
def consume(self):
for msg in self._queue:
raise ValueError(msg)
def test_it():
queue = MagicMock()
queue.__next__.side_effect = [4, 5, 6] # не работает
consumer = Consumer(queue)
consumer.consume()
Интерпретатор даже не делает попытки вызвать __next__.
P.S. Код выше - упрощенный пример реального программного компонента.