UnitTest Framework - Prueba de excepciones

El marco de prueba de Python proporciona los siguientes métodos de afirmación para verificar que se generen excepciones.

assertRaises (excepción, invocable, * args, ** kwds)

Pruebe que se genera una excepción (primer argumento) cuando se llama a una función con cualquier argumento posicional o de palabra clave. La prueba pasa si se genera la excepción esperada, es un error si se genera otra excepción o falla si no se genera ninguna excepción. Para capturar cualquiera de un grupo de excepciones, una tupla que contenga las clases de excepción se puede pasar como excepción.

En el siguiente ejemplo, se define una función de prueba para comprobar si se genera ZeroDivisionError.

import unittest

def div(a,b):
   return a/b
class raiseTest(unittest.TestCase):
   def testraise(self):
      self.assertRaises(ZeroDivisionError, div, 1,0)

if __name__ == '__main__':
   unittest.main()

La función testraise () usa la función assertRaises () para ver si la división por cero ocurre cuando se llama a la función div (). El código anterior generará una excepción. Pero cambia los argumentos a la función div () de la siguiente manera:

self.assertRaises(ZeroDivisionError, div, 1,1)

Cuando se ejecuta un código con estos cambios, la prueba falla porque no se produce ZeroDivisionError.

F
================================================================
FAIL: testraise (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "raisetest.py", line 7, in testraise
      self.assertRaises(ZeroDivisionError, div, 1,1)
AssertionError: ZeroDivisionError not raised

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures = 1)

asertRaisesRegexp (excepción, expresión regular, invocable, * args, ** kwds)

Prueba que regexp coincide con la representación de cadena de la excepción generada. regexp puede ser un objeto de expresión regular o una cadena que contenga una expresión regular adecuada para ser utilizada por re.search ().

El siguiente ejemplo muestra cómo se usa assertRaisesRegexp ():

import unittest
import re

class raiseTest(unittest.TestCase):
   def testraiseRegex(self):
      self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","TutorialsPoint")
      
if __name__ == '__main__':
   unittest.main()

Aquí, la prueba testraseRegex () no falla como primer argumento. "Point" se encuentra en la segunda cadena de argumentos.

================================================================
FAIL: testraiseRegex (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:/Python27/raiseTest.py", line 11, in testraiseRegex
      self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","TutorialsPoint")
AssertionError: TypeError not raised
----------------------------------------------------------------------

Sin embargo, el cambio se muestra a continuación:

self.assertRaisesRegexp(TypeError, "invalid", reg,123,"TutorialsPoint")

Se lanzará la excepción TypeError. Por lo tanto, se mostrará el siguiente resultado:

================================================================
FAIL: testraiseRegex (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "raisetest.py", line 11, in testraiseRegex
      self.assertRaisesRegexp(TypeError, "invalid", reg,123,"TutorialsPoint")
AssertionError: "invalid" does not match 
   "first argument must be string or compiled pattern"
----------------------------------------------------------------------