Framework UnitTest - Test delle eccezioni

Il framework di test Python fornisce i seguenti metodi di asserzione per verificare che vengano sollevate eccezioni.

assertRaises (eccezione, callable, * args, ** kwds)

Verifica che venga sollevata un'eccezione (primo argomento) quando una funzione viene chiamata con argomenti posizionali o parole chiave. Il test viene superato se viene sollevata l'eccezione prevista, è un errore se viene sollevata un'altra eccezione o non riesce se non viene sollevata alcuna eccezione. Per catturare uno qualsiasi di un gruppo di eccezioni, una tupla contenente le classi di eccezione può essere passata come eccezione.

Nell'esempio seguente, viene definita una funzione di test per verificare se ZeroDivisionError è sollevato.

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 funzione testraise () utilizza la funzione assertRaises () per vedere se la divisione per zero si verifica quando viene chiamata la funzione div (). Il codice precedente solleverà un'eccezione. Ma cambia gli argomenti alla funzione div () come segue:

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

Quando un codice viene eseguito con queste modifiche, il test ha esito negativo poiché ZeroDivisionError non si verifica.

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 (eccezione, regexp, callable, * args, ** kwds)

Verifica che regexp corrisponda alla rappresentazione di stringa dell'eccezione sollevata. regexp può essere un oggetto espressione regolare o una stringa contenente un'espressione regolare adatta all'uso da parte di re.search ().

L'esempio seguente mostra come viene utilizzato assertRaisesRegexp () -

import unittest
import re

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

Qui, testraseRegex () non fallisce come primo argomento. "Punto" si trova nella seconda stringa di argomenti.

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

Tuttavia, la modifica è come mostrato di seguito:

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

Viene generata un'eccezione TypeError. Quindi, verrà visualizzato il seguente risultato:

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