donné: si mais j'ai une propriété, et quand je remplace < code> c.do_somettion code> avec Comment est-ce que je teste une propriété jette une exception? p> do_somettreux code> jette une exception que le test passe. p>
c.name = "Nom" code> I Obtenir une erreur sur mon module de test n'étant pas importé et Eclipse met en évidence le symbole Equals. P>
setattr code> et
getattr code> est nouveau pour moi. Ils ont certainement aidé dans ce cas, merci. P> p>
5 Réponses :
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: mais le faisant en deux étapes fonctionne bien: p> 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()
Assertraises code> attend un objet appelable. Vous pouvez créer une fonction et transmettre:
self.assertRaises(NameError, setattr, obj, "name", "Name")
Depuis Python 2.7+ devrait vérifier @Raphaelahrens Répondez ci-dessous. C'est beaucoup plus Pythonic Stackoverflow.com/a/23650764/601245
Le deuxième argument à Assertraises code> devrait Soyez appelable
.
Une déclaration d'affectation (c.-à-d. aussi, vous ne pouvez pas attribuer à class.name = "Nom" code>) n'est pas une appelable pour ne pas fonctionner. Utilisez
setattr code> pour effectuer l'affectation comme SO P>
class code> car c'est un mot clé . p> p>
Depuis Python 2.7 et 3.1 Pour que vous puissiez écrire votre test avec le < Code> avec code> instruction comme ceci: p> Assertraises () code> peut être utilisé comme gestionnaire de contexte. Voir ici pour Python 2 et ici pour Python3 .
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)
Pourriez-vous expliquer pourquoi cela mérite un vote négatif?, Il pourrait y avoir un effet secondaire, je manque. Merci