Встретился участок кода с контекстным менеджером. Потербовалось написать для этого юнит тест.
Для справки, контекстным менеджером в питоне называется конструкция вида:
1 2 |
with self.statsd_client.timer('metric'): pass |
Для того чтобы сделать мок метода и не ловить ошибки
1 |
AtributeError __exit__ |
мы должны правильно описать мок:
1 2 3 4 5 6 |
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 |
Дружище, спасибо большое. Долго не мог сделать мок на функцию с контекстным менеджером, а тут все понятно описано.