Je me moque d'une file d'attente de messages, où je veux qu'elle renvoie 2 messages, puis retourne None chaque fois qu'elle est appelée (pour simuler que la file d'attente est vide). Cependant, après l'appel du 3ème message, j'obtiens une erreur de la part de l'infrastructure qui se moque de dire qu'il n'y a pas de valeur "suivante".Python retourne la valeur par défaut après que les valeurs initiales prédéfinies soient retournées
Voici un exemple:
from mock import MagicMock
mock_message_queue = MagicMock(name='message_queue')
expected_messages = ['message 1', 'message 2', None]
mock_message_queue.fetch.side_effect = expected_messages
print('mock_message_queue.fetch() = {}'.format(mock_message_queue.fetch()))
print('mock_message_queue.fetch() = {}'.format(mock_message_queue.fetch()))
print('mock_message_queue.fetch() = {}'.format(mock_message_queue.fetch()))
print('mock_message_queue.fetch() = {}'.format(mock_message_queue.fetch()))
Sortie:
mock_message_queue.fetch() = message 1
mock_message_queue.fetch() = message 2
mock_message_queue.fetch() = None
Traceback (most recent call last):
File "/home/wsi/.PyCharm2017.1/config/scratches/mock_message_bus.py", line 10, in <module>
print('mock_message_queue.fetch() = {}'.format(mock_message_queue.fetch()))
File "/usr/local/lib/python3.5/dist-packages/mock/mock.py", line 1062, in __call__
return _mock_self._mock_call(*args, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/mock/mock.py", line 1121, in _mock_call
result = next(effect)
StopIteration
Process finished with exit code 1
Donc, fondamentalement, je veux qu'il revienne toujours Aucun après il retourne 'un message 2'. Quelqu'un sait-il comment faire ça?