2017-05-13 12 views
1

Ich benutze MagicMock mit Python 2.7, um Objekte zu mocksen. Eine der Klassen, die ich verspotte, hat Eigenschaften, von denen eine in einigen Fällen eine TypeError auslösen kann.Wie kann ich eine Eigenschaft verspotten, um eine Ausnahme auszulösen?

Ich möchte, dass das Verhalten verspotten, aber ich kann nicht herausfinden, wie:

  • del my_mock.my_property bewirkt eine AttributeError wenn my_property zugegriffen wird, aber ich brauche eine TypeError.
  • my_mock.my_property = MagicMock(side_effect=TypeError) verursacht eine TypeError wenn my_property genannt ist, aber nicht, wenn es nur abgerufen.

Wie würde ich das tun?

+0

Nur eine Idee: 2. Option + 'my_mock.my_property = Eigenschaft (my_mock.my_property)' –

+0

Vielleicht machen Sie die Eigenschaft eine Klasse, die definiert ein ['' '__delattr__'''] (https: //docs.python. org/3/reference/datamodel.html # object .__ delattr__) Methode, die ihr Verhalten beim Löschen ändert. – wwii

+0

Unserer vielleicht ist es genauer zu sagen, definieren Sie eine '' '__delattr__''' Methode für das Mock-Objekt, das das Verhalten der Eigenschaft ändern wird, wenn es gelöscht wird. – wwii

Antwort

1

können Sie PropertyMock für diesen Zweck verwenden:

import mock 

class A(object): 

    @property 
    def prop(self): 
     pass 

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

Wenn Sie jetzt a.prop zugreifen, es wird eine TypeError zu erhöhen.

+1

Das sieht aus wie ich brauche, werde ich am Montag überprüfen. Kann ich das auch auf einer MagicMock-Instanz einstellen? – zneak

Verwandte Themen