如何模拟属性以引发异常?

zne*_*eak 6 python unit-testing mocking python-2.7 magicmock

我在 Python 2.7 中使用 MagicMock 来模拟对象。我嘲笑的类之一具有属性,其中之一TypeError在某些情况下可以引发 a 。

我想嘲笑这种行为,但我不知道如何:

  • del my_mock.my_property将导致访问AttributeErrorif my_property,但我需要一个TypeError.
  • my_mock.my_property = MagicMock(side_effect=TypeError)导致一个TypeErrorwhenmy_property调用,但不是当它仅仅被访问时。

我该怎么做?

Sim*_*ser 6

您可以PropertyMock为此目的使用:

import mock

class A(object):

    @property
    def prop(self):
        pass

a = A()
type(a).prop = mock.PropertyMock(side_effect=TypeError)
Run Code Online (Sandbox Code Playgroud)

如果您现在访问a.prop它会引发一个TypeError.