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.

results matching ""

    No results matching ""