Aprendendo Python com testes automatizados

Uma forma de aprender Python com testes automatizados

#automated-test, #python
Tentei aprender Python por pouco tempo, se o código puder ser melhorado comente abaixo 😂.

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!

Posts nesta série

Referências