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