web-dev-qa-db-fra.com

Comment utiliser les assert_raises de nose?

J'ai cherché de la documentation, mais je n'en ai pas trouvé. Il y en avait un couple qui n'expliquait pas grand-chose.

Quelqu'un peut-il m'expliquer le nez

assert_raises(what should I put here?)

fonction et comment l'utiliser?

53
user1544624

La fonction assert_raises() teste pour s'assurer qu'un appel de fonction déclenche une exception spécifiée lorsqu'il est présenté avec certains paramètres.

Par exemple, si vous aviez une fonction add qui ajoute deux nombres, elle devrait probablement augmenter un TypeError lorsque vous lui passez, disons, un entier et une chaîne. Donc:

from nose.tools import assert_raises

def add(x, y):
    return x + y

assert_raises(TypeError, add, 2, "0")

Le premier argument est le type d'exception que vous attendez. La seconde est la fonction à appeler. Le reste des arguments sera transmis à la fonction (dans ce cas, ils deviendront x et y à l'intérieur de la fonction).

Si l'exception attendue est déclenchée par la fonction, l'assertion passe.

65
kindall

Bien que la réponse acceptée soit correcte, je pense qu'il y a une meilleure utilisation pour assert_raises méthode.

Si vous voulez simplement affirmer qu'une exception se produit, il est probablement plus simple et plus propre d'utiliser @raises syntaxe.

@raises(HTTPError)
def test_exception_is_raised:
    call_your_method(p1, p2)

Cependant, supposons que vous souhaitiez faire un peu plus avec l'exception déclenchée, par exemple: nous devons affirmer que HTTPError déclenchée est de type 401: non autorisé, au lieu de 500: erreur du serveur =.

Dans une telle situation, la syntaxe ci-dessus n'est pas très utile, nous devons utiliser le assert_raises mais d'une manière différente. Si on ne lui passe pas un callable comme second paramètre assert_raises renverra un contexte que nous pouvons utiliser pour tester davantage les détails de l'exception.

def test_exception_is_raised:
    with assert_raises(HTTPError) as cm:
         call_your_method(p1, p2)
    ex = cm.exception # raised exception is available through exception property of context
    ok_(ex.code == 401, 'HTTPError should be Unauthorized!')
90
BuddhiP