Testando uma função
Vamos começar com o mais básico possível:
Temos o arquivo soma.py
# coding: utf-8
def soma(a, b):
u"""
Função faz a soma de dois números.
Ex:
>>> soma(1, 2)
3
>>> soma(3, 4)
7
"""
return a + b
if __name__ == '__main__':
resultado = soma(1, 2)
if resultado == 3:
print u"Soma 1 + 2 = 3 está certo"
else:
print u"Soma não funcionou"
Ao executar esse código, recebemos: "Soma 1 + 2 = 3 funciona". Testamos nossa função, mas será que ela funciona corretamente se passamos um valor negativo?
Vamos testar!
Adicione ao final do arquivo soma.py
resultado_2 = soma(1, -1)
if resultado_2 == 0:
print u"Soma 1 + -1 = 0 funciona"
else:
print "Soma não funcionou"
Certo! Ao executar nosso código, veremos duas mensagens que garantem que nossa função está funcionando. É bem cansativo se tivermos que escrever nosso código dessa forma, vamos testar usando o unittest
.
Nosso arquivo ficou assim:
# coding: utf-8
import unittest
def soma(a, b):
u"""
Função faz a soma de dois números.
Ex:
>> soma(1, 2)
3
>> soma(3, 4)
7
"""
return a + b
# Precisamos herdar do unittest.TestCase
# para que nossos test cases sejam reconhecidos
class TestSoma(unittest.TestCase):
# cada test case é uma função separada e independente
def test_soma_numeros_positivos(self):
resultado = soma(1, 2)
# usamos um metodo padrão do TestCase para verificar se o valor é igual
# poderiamos ter feito de uma forma mais simples utilizando
# assert resultado == 3
self.assertEqual(resultado, 3)
def test_soma_numeros_negativos(self):
resultado = soma(1, -1)
self.assertEqual(resultado, 0)
if __name__ == '__main__':
# Executa todos os testes desse arquivo
unittest.main()
Ao executar esse teste com python soma.py
vamos receber o seguinte resultado:
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Isso significa que os nossos dois testes rodaram com sucesso, se por exemplo, houvesse falha em algum, teríamos um resultado similar a esse:
.F
======================================================================
FAIL: test_soma_numeros_positivos (__main__.TestSoma)
----------------------------------------------------------------------
Traceback (most recent call last):
File "soma.py", line 30, in test_soma_numeros_positivos
self.assertEqual(resultado, 3)
AssertionError: 4 != 3
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (failures=1)
Nesse exemplo, a soma retornou 4 e deveria retornar 3. Dessa forma saberiamos que nossa função parou de funcionar.