¿Cómo usar assert_raises de la nariz?

Busqué documentación, pero no pude encontrar ninguna. Había una pareja que no explicaba mucho.

¿Puede alguien explicarme la nariz?

assert_raises(what should I put here?) 

¿Función y cómo usarla?

La función assert_raises() pruebas para asegurarse de que una llamada a la función assert_raises() una excepción específica cuando se le presentan ciertos parámetros.

Por ejemplo, si tiene una función de 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 esperas. La segunda es la función a llamar. El rest de los argumentos se pasarán a la función (en este caso, se convertirán en x e y dentro de la función).

Si la excepción genera la excepción esperada, la aserción pasa.

Si bien la respuesta aceptada es correcta, creo que hay un mejor uso del método assert_raises .

Si simplemente quiere afirmar que se produce una excepción, probablemente sea más sencillo y limpio utilizar la syntax 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 generada, por ejemplo: debemos afirmar que HTTPError generado es del tipo 401: no autorizado , en lugar de 500: error del servidor .

En una situación así, la syntax no es tan útil, deberíamos utilizar assert_raises pero de una manera diferente. Si no lo pasamos de manera assert_raises el segundo parámetro assert_raises devolverá un contexto que podemos usar para probar más a fondo 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!')