2012-08-01 6 views
44

He buscado documentación, pero no he podido encontrar ninguna. Hubo una pareja que no explicó mucho.¿Cómo usar los assert_raises de nose?

Puede alguien explicarme función

assert_raises(what should I put here?) 

de la nariz y de cómo utilizarlo?

Respuesta

59

Los assert_raises() pruebas de función para asegurarse de que una llamada de función lanza una excepción especificada cuando se presenta con ciertos parámetros.

Por ejemplo, si usted tenía una función add que suma dos números, probablemente debería plantear una TypeError cuando se le pasa, por ejemplo, un entero y una cadena. Entonces:

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 x y y dentro de la función).

Si la excepción esperada es provocada por la función, la afirmación pasa.

+1

gracias bien! ¿Pero usted también sabe a enlaces para una buena documentación de la nariz donde puedo checkout otras funciones tales como la nariz assert_equal, assert_raises! @kindall – user1544624

+0

tuve problemas para encontrar eso, también. Sin embargo, puedes probar 'help (assert_rases)'. – kindall

+4

Un poco oculto, pero http://nose.readthedocs.org/en/latest/testing_tools.html#module-nose.tools dice en el primer párrafo: "... y todos los mismos métodos assertX encontrados en unittest.TestCase (solo se deletrea en PEP 8, por lo que assert_equal en vez de assertEqual). ". Aquí está la lista: http://docs.python.org/2/library/unittest.html#assert-methods –

78

Mientras que la respuesta aceptada es correcta, creo que hay una mejor utilización de assert_raises método.

Si simplemente desea afirmar que se produce una excepción, probablemente sea más simple y más limpio utilizar la sintaxis @raises.

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

Sin embargo, supongamos que usted quiere hacer algo más con la excepción planteado, por ejemplo: hay que afirmar que elevó HTTPError es de tipo 401: no autorizado, en lugar de 500: Error de servidor.

En tal situación, por encima de la sintaxis no es tan útil, debemos utilizar el assert_raises pero de una manera diferente. Si no lo pasamos 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!') 
+8

Gracias me enseñó algo nuevo. – user1544624

+0

Me gustaría ver el mensaje de la excepción. El ex que obtengo de cm.exception tiene un mensaje en blanco. Sin embargo, la excepción se plantea con un mensaje. ¿Qué está pasando mal? – akshitBhatia

+1

El único lugar en el que pude encontrar información sobre cómo hacer esto ... –

Cuestiones relacionadas