Je essaie de simuler une propriété d'une classe (@property decorator) et je suis tombé sur ce comportement incorrect:
>>> from mock import MagicMock, PropertyMock
>>> m = MagicMock()
>>> type(m).p = PropertyMock(side_effect=AttributeError)
>>> m.p
Le comportement correct est le suivant:
>>> from mock import MagicMock, PropertyMock
>>> m = MagicMock()
>>> type(m).p = PropertyMock(side_effect=ValueError)
>>> m.p
Traceback (most recent call last)
[...]
ValueError
Je ne peux pas comprendre pourquoi le fait de définir une exception différente me donne des résultats différents. Le résultat attendu dans les deux cas est que l'exception devrait être levée! Donc, la ligne In[4] devrait lever un AttributeError
. Ce n'est pas le cas.
Quelqu'un peut-il m'éclairer?
Addendum: La propriété que j'essaie de vérifier effectue une vérification intelligente pour voir si la valeur passée est sensée. Si ladite valeur n'est pas sensée, elle renvoie AttributeError car je comprends que c'est l'exception correcte en Python. Ainsi, je dois vérifier le code qui utilise la propriété pour l'échec ainsi que pour le succès. Ainsi, en utilisant un MagicMock pour simuler la propriété et lever ladite exception. Un exemple trivial serait:
@x.setter
def x(self, value):
if value < 0:
raise AttributeError("La valeur ne peut pas être négative!")
self._x = value