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