Mock для Context manager в Python

Встретился участок кода с контекстным менеджером. Потербовалось написать для этого юнит тест.
Для справки, контекстным менеджером в питоне называется конструкция вида:

with self.statsd_client.timer('metric'):
    pass

Для того чтобы сделать мок метода и не ловить ошибки

AtributeError __exit__

мы должны правильно описать мок:

timer = Mock()
timer.__enter__ = Mock(return_value=(Mock(), None))
timer.__exit__ = Mock(return_value=None)

self.statsd_client = Mock()
self.statsd_client.timer.return_value = timer

1 Comment

  1. Artem

    Дружище, спасибо большое. Долго не мог сделать мок на функцию с контекстным менеджером, а тут все понятно описано.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *