2012-05-23 8 views
5

Estoy usando nose 1.1.2 para escribir pruebas para un proyecto de Python. Existe esta función assert_raises que se menciona en la documentación, pero no puedo encontrarla en ningún lado.¿Dónde está la función assert_raises de nose?

Debe ser una abreviatura de algo como esto:

value_error_raised = False 
try: 
    do_something_that_should_raise_value_error() 
except ValueError: 
    value_error_raised = True 
assert value_error_raised 

type_error_raised = False 
try: 
    do_something_else_that_should_raise_type_error() 
except TypeError: 
    type_error_raised = True 
assert type_error_raised 

que se convertiría en:

assert_raises(ValueError, 
       do_something_that_should_raise_value_error) 

assert_raises(TypeError, 
       do_something_else_that_should_raise_type_error) 

ya he buscado el código fuente y la única mención que encontré fue en el tools.py módulo, dentro de la documentación raises:

Si desea probar muchas aserciones sobre excepciones en una prueba única, es posible que desee utilizar assert_raises en su lugar.

¿Se eliminó esta función de la nariz? Si es así, ¿podría alguien ayudarme a entender por qué?

Respuesta

7
>>> from nose.tools import assert_raises 
>>> assert_raises 
<bound method Dummy.assertRaises of <nose.tools.Dummy testMethod=nop>> 
>>> import nose 
>>> nose.__version__ 
'1.1.2' 

Yo personalmente uso las clases unittest2.TestCase con nosetests, y uso self.assertRaises.

+0

Ok, eso funciona! ¡Gracias! Me acabo de dar cuenta de que la razón por la que no está explícitamente definido en nose.tools es porque es una solución a través de la prueba unittest.TestCase assertRaise. En consecuencia, eclipse sigue informando de un error de importación en 'from nose.tools import assert_raises'. – tbellardi

+0

no es solo que PyDev está equivocado, en un proyecto más grande usando Jython recuerdo haber tenido que agregar excepciones para más de cien identificadores ... –

5

Utilice el decorador @raises(*exceptions) en su función de prueba.

+4

Esto verifica si se produjo una de las excepciones, por lo que necesitaría una función de prueba para cada error esperado planteado. Si quiero una sola función de prueba para verificar muchas excepciones planteadas, eso no me ayuda. – tbellardi

1

Esta respuesta aplica al motivo por el cual no puede encontrar información acerca de assert_raises.

De nose documentation:

El módulo nose.tools ofrece [...] todos los mismos métodos que se encuentran en assertX unittest.TestCase (sólo deletreado en PEP 8 moda, por lo que en lugar de assert_equal assertEqual)

Aquí están PEP 8's suggested function naming y list of assertX methods en la documentación básica de Python.

Cuestiones relacionadas