Встретился участок кода с контекстным менеджером. Потербовалось написать для этого юнит тест.
Для справки, контекстным менеджером в питоне называется конструкция вида:
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
Дружище, спасибо большое. Долго не мог сделать мок на функцию с контекстным менеджером, а тут все понятно описано.