Как я могу издеваться над свойством, чтобы вызвать исключение?

Я использую MagicMock с Python 2.7 для макетов объектов. Один из классов, над которым я издеваюсь, имеет свойства, один из которых может поднять TypeError в некоторых случаях.

Я хотел бы посмеяться над этим поведением, но я не могу понять, как:

  • del my_mock.my_property вызовет AttributeError если my_property доступ, но мне нужно TypeError,
  • my_mock.my_property = MagicMock(side_effect=TypeError) вызывает TypeError когда my_property называется, но не тогда, когда к нему просто обращаются.

Как бы я это сделал?

1 ответ

Решение

Ты можешь использовать PropertyMock для этого:

import mock

class A(object):

    @property
    def prop(self):
        pass

a = A()
type(a).prop = mock.PropertyMock(side_effect=TypeError)

Если у вас есть доступ a.prop это поднимет TypeError,

Другие вопросы по тегам