2009-03-15 9 views
13

Conozco unittest Módulo Python.Python: prueba que se realiza correctamente cuando no se produce una excepción

Sé acerca de assertRaises() método de TestCase clase.

Me gustaría escribir una prueba que tiene éxito cuando una excepción es no planteada.

¿Alguna pista por favor?

+0

posible duplicado de [Python unittest - opuesto de assertRaises?] (Http://stackoverflow.com/questions/4319825/python-unittest-opposite-of-assertraises) – brandizzi

+0

@brandizzi - compruebe la fecha en ese "duplicado" pregunta;) – testerjoe2

Respuesta

12

El corredor de prueba detectará todas las excepciones que no afirmó que se plantearían. Por lo tanto :

doStuff() 
self.assert_(True) 

Esto debería funcionar bien. Puede omitir la llamada self.assert_, ya que realmente no hace nada. Me gusta ponerlo allí para documentar que no olvidé una afirmación.

+5

De esta manera, la prueba no fallará pero generará un error. El enfoque try/except mencionado en la otra respuesta es una mejor respuesta en mi opinión. – tisto

21
def runTest(self): 
    try: 
     doStuff() 
    except: 
     self.fail("Encountered an unexpected exception.") 

ACTUALIZACIÓN: Como liw.fi menciones, el resultado por defecto es un éxito, por lo que el ejemplo anterior es una especie de anti patrón. Probablemente solo deberías usarlo si quieres hacer algo especial antes de fallar. También debería detectar las excepciones más específicas posibles.

+0

No es pedante, pero Python usa try ... excepto, no intenta ... catch –

+1

Gracias - la 'respuesta antes del café' gotcha ataca nuevamente. –

+3

Esto tiene la desventaja de perder el trazado original de la pila, haciendo que la prueba sea más difícil de depurar si falla. – b4hand

6

que utilizar este modelo para el tipo de afirmación de lo solicitado:

with self.assertRaises(Exception): 
    try: 
     doStuff() 
    except: 
     pass 
    else: 
     raise Exception 

se producirá un error exactamente cuando excepción es levantada por hacerTarea().

+0

Kosii: ¿Es esta también una solución correcta? http://stackoverflow.com/a/4319870/6648326 – testerjoe2

Cuestiones relacionadas