Aprendendo Python com testes automatizados
Então… Eu estava assistindo as aulas do Python for Zumbies e me deparei com alguns códigos para fazer. Porém quando se inicia o aprendizado de alguma linguagem você quer ver seu código funcionando, para mim existem algumas formas de ver meu software funcionando:
- Testar eu mesmo;
- Entregar o projeto para o usuário e a melhor de todas;
- Automatizar os testes com o software;
Então a melhor forma que resolvi testar foi criando testes automatizados.
Sequência de Fibonacci
Primeiro vou criar o arquivo de teste.
Após estudar um pouco cheguei no seguinte código no arquivo fib_test.py
:
import unittest
from fib import fib
class FibTestCase(unittest.TestCase):
def test_fib1(self):
self.assertEqual(fib(1), 1)
def test_fib0(self):
self.assertEqual(fib(0), 0)
def test_fib6(self):
self.assertEqual(fib(6), 8)
def test_fib6_again(self):
self.assertTrue(fib(6) == 8)
unittest.main()
Se esse código for executado gera o seguinte erro:
$ python fib_test.py
Traceback (most recent call last):
File "fib_test.py", line 2, in <module>
from fib import fib
ImportError: No module named 'fib'
Até aí tudo bem, eu ainda não criei o código fibonacci, vamos o arquivo fib.py
:
def fib(n):
if n < 2:
return(n)
a = fib(n-1)
b = fib(n-2)
return(a+b)
E executando, temos:
$ python fib_test.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.000s
OK
Orientação a objetos
Depois que aprendi a orientação a objetos em python eu fiz alguns exemplos, entre eles:
Primeiro o teste:
import unittest
from televisao import Televisao
class TelevisaoTestCase(unittest.TestCase):
def setUp(self):
self.tv_sala = Televisao('Sala')
def test_uma_nova_televisao_deve_ser_desligada(self):
self.assertFalse(self.tv_sala.ligada)
def test_eu_posso_mudar_o_status_para_ligada(self):
self.tv_sala.ligada = True
self.assertTrue(self.tv_sala.ligada)
def test_eu_posso_mudar_o_canal(self):
self.tv_sala.canal_mais_um
selft.assertEqual(self.tv_sala.canal, 2)
unittest.main()
Agora a classe:
class Televisao:
def __init__(self, local):
self.ligada = False
self.canal = 1
self.local = local
Esse exemplo da classe Televisao
eu fiz ao estilo TDD, criava o teste e depois o código.
Ficou faltando um método na classe Televisao
, se estiver estudando semelhante a mim, adiciona lá 😉.
Confira o Python for Zumbies tem várias vídeo aula em português e diversos exercícios bem práticos!