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