python - example - run nosetests
Cómo usar los assert_raises de nose? (2)
La función assert_raises()
prueba para asegurarse de que una llamada de función genera una excepción específica cuando se presenta con ciertos parámetros.
Por ejemplo, si tiene una función add
que agrega dos números, probablemente debería generar un TypeError
cuando lo pase, por ejemplo, un entero y una cadena. Asi que:
from nose.tools import assert_raises
def add(x, y):
return x + y
assert_raises(TypeError, add, 2, "0")
El primer argumento es el tipo de excepción que espera. El segundo es la función para llamar. El resto de los argumentos se pasarán a la función (en este caso, se convertirán en y
dentro de la función).
Si la función espera la excepción esperada, la afirmación pasa.
Busqué documentación, pero no pude encontrar ninguna. Hubo una pareja que no explicó mucho.
¿Alguien me puede explicar la nariz?
assert_raises(what should I put here?)
función y cómo usarlo?
Si bien la respuesta aceptada es correcta, creo que hay un mejor uso para assert_raises
método.
Si simplemente desea afirmar que se produce una excepción, es probable que sea más simple y más limpio usar la sintaxis de @raises
.
@raises(HTTPError)
def test_exception_is_raised:
call_your_method(p1, p2)
Sin embargo, suponga que desea hacer un poco más con la excepción planteada, por ejemplo: debemos afirmar que HTTPError elevado es del tipo 401: no autorizado , en lugar de 500: error del servidor .
En una situación como la anterior, la sintaxis no es tan útil, deberíamos usar assert_raises
pero de una manera diferente. Si no lo pasamos, un parámetro callable
como el segundo parámetro assert_raises
, devolverá un contexto que podemos usar para probar más los detalles de la excepción.
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!'')