segunda-feira, 10 de julho de 2017

dmitryrck.github.io

Unix and Me :) - Aprendendo Python com testes automatizados

Dmitry Rocha

Estou aprendendo ainda Python, então se o código puder ser melhorado, pode comentar ;)

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 duas forma de ver meu software funcionando:

  • Automatizar os testes com o software;
  • Entregar o projeto para o usuário (que pode até mesmo ser eu).

Eu como usuário gosto de usar software apenas “funcional”, i. e., para que que eu vou usar uma Sequência de Fibonacci ou um software que contabiliza médias de notas se eu não estou tendo aulas?

Então a melhor forma que resolvi testar foi criando testes automatizados.

Primeiro vou criar o arquivo de teste:

Após estudar um pouco cheguei no seguinte código:

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 criar então:

# 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

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!

“26.3. Unittest — Unit Testing Framework — Python 3.4.1 Documentation.” Accessed September 1, 2014. https://docs.python.org/3/library/unittest.html.

“Python Para Zumbis Com Fernando Masanori.” Accessed September 2, 2014. http://pycursos.com/python-para-zumbis/.

0 comentários: