Framework UnitTest - Test d'exceptions

Le cadre de test Python fournit les méthodes d'assertion suivantes pour vérifier que des exceptions sont déclenchées.

assertRaises (exception, appelable, * args, ** kwds)

Testez qu'une exception (premier argument) est déclenchée lorsqu'une fonction est appelée avec des arguments de position ou de mot-clé. Le test réussit si l'exception attendue est déclenchée, est une erreur si une autre exception est déclenchée ou échoue si aucune exception n'est déclenchée. Pour intercepter n'importe laquelle d'un groupe d'exceptions, un tuple contenant les classes d'exception peut être passé comme exception.

Dans l'exemple ci-dessous, une fonction de test est définie pour vérifier si ZeroDivisionError est déclenchée.

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 fonction testraise () utilise la fonction assertRaises () pour voir si une division par zéro se produit lorsque la fonction div () est appelée. Le code ci-dessus lèvera une exception. Mais change les arguments en fonction div () comme suit -

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

Lorsqu'un code est exécuté avec ces modifications, le test échoue car ZeroDivisionError ne se produit pas.

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)

assertRaisesRegexp (exception, expression régulière, appelable, * args, ** kwds)

Teste que l' expression rationnelle correspond à la représentation sous forme de chaîne de l'exception levée. regexp peut être un objet d'expression régulière ou une chaîne contenant une expression régulière pouvant être utilisée par re.search ().

L'exemple suivant montre comment assertRaisesRegexp () est utilisé -

import unittest
import re

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

Ici, le test testraseRegex () n'échoue pas en tant que premier argument. "Point" se trouve dans la deuxième chaîne d'argument.

================================================================
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
----------------------------------------------------------------------

Cependant, le changement est comme indiqué ci-dessous -

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

Une exception TypeError sera levée. Par conséquent, le résultat suivant sera affiché -

================================================================
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"
----------------------------------------------------------------------