12
votes

Python - Tester une propriété jette une exception

donné: xxx

si do_somettreux jette une exception que le test passe.

mais j'ai une propriété, et quand je remplace < code> c.do_somettion avec c.name = "Nom" I Obtenir une erreur sur mon module de test n'étant pas importé et Eclipse met en évidence le symbole Equals.

Comment est-ce que je teste une propriété jette une exception?

edit:

setattr et getattr est nouveau pour moi. Ils ont certainement aidé dans ce cas, merci.


0 commentaires

5 Réponses :


-1
votes

Vous obtenez une erreur car c'est une erreur de syntaxe dans Python d'avoir une affectation à l'intérieur d'une autre expression. Par exemple: xxx pré>

mais le faisant en deux étapes fonctionne bien: p> xxx pré>

Pour tester qu'une propriété jette une exception, utilisez un essai Bloc: P>

try:
   object.property = 'error'
except ExpectedError:
   test_passes()
else:
   test_fails()


0 commentaires

19
votes

Assertraises code> attend un objet appelable. Vous pouvez créer une fonction et transmettre:

self.assertRaises(NameError, setattr, obj, "name", "Name")


1 commentaires

Depuis Python 2.7+ devrait vérifier @Raphaelahrens Répondez ci-dessous. C'est beaucoup plus Pythonic Stackoverflow.com/a/23650764/601245



8
votes

Le deuxième argument à Assertraises devrait Soyez appelable .

Une déclaration d'affectation (c.-à-d. class.name = "Nom" ) n'est pas une appelable pour ne pas fonctionner. Utilisez setattr pour effectuer l'affectation comme SO xxx

aussi, vous ne pouvez pas attribuer à class car c'est un mot clé .


0 commentaires

15
votes

Depuis Python 2.7 et 3.1 Assertraises () peut être utilisé comme gestionnaire de contexte. Voir ici pour Python 2 et ici pour Python3 .

Pour que vous puissiez écrire votre test avec le < Code> avec instruction comme ceci: xxx


0 commentaires

1
votes

Comme @interjay indiqué, il s'attend à une appelable, mais vous n'avez pas besoin de définir une fonction nommée pour cela. Un Lambda le fera:

self.assertRaises(SomeException, lambda: my_instance.some_property)


1 commentaires

Pourriez-vous expliquer pourquoi cela mérite un vote négatif?, Il pourrait y avoir un effet secondaire, je manque. Merci