Estrutura UnitTest - Teste de exceções
A estrutura de teste Python fornece os seguintes métodos de asserção para verificar se as exceções são levantadas.
assertRaises (exceção, chamável, * args, ** kwds)
Teste se uma exceção (primeiro argumento) é gerada quando uma função é chamada com quaisquer argumentos posicionais ou de palavra-chave. O teste passa se a exceção esperada é levantada, é um erro se outra exceção é levantada ou falha se nenhuma exceção é levantada. Para capturar qualquer um de um grupo de exceções, uma tupla contendo as classes de exceção pode ser passada como exceção.
No exemplo abaixo, uma função de teste é definida para verificar se ZeroDivisionError é gerado.
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()
A função testraise () usa a função assertRaises () para ver se a divisão por zero ocorre quando a função div () é chamada. O código acima irá gerar uma exceção. Mas altera os argumentos para a função div () da seguinte maneira -
self.assertRaises(ZeroDivisionError, div, 1,1)
Quando um código é executado com essas alterações, o teste falha, pois ZeroDivisionError não ocorre.
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 (exceção, regexp, chamável, * args, ** kwds)
Testa se regexp corresponde à representação de string da exceção gerada. regexp pode ser um objeto de expressão regular ou uma string contendo uma expressão regular adequada para uso por re.search ().
O exemplo a seguir mostra como assertRaisesRegexp () é usado -
import unittest
import re
class raiseTest(unittest.TestCase):
def testraiseRegex(self):
self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","TutorialsPoint")
if __name__ == '__main__':
unittest.main()
Aqui, o teste testraseRegex () não falha como primeiro argumento. "Point" é encontrado na segunda string de argumento.
================================================================
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
----------------------------------------------------------------------
No entanto, a mudança é mostrada abaixo -
self.assertRaisesRegexp(TypeError, "invalid", reg,123,"TutorialsPoint")
Uma exceção TypeError será lançada. Portanto, o seguinte resultado será exibido -
================================================================
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"
----------------------------------------------------------------------