domingo, 5 de dezembro de 2010

Começando com testes em Python

Olá pessoal, depois de muito tempo sem tempo (e idéias) para postar, eu finalmente tive uma boa idéia. Você ai, que programa em C ou até mesmo já em Python, como você testa seus programas? Fica conferindo a saída do terminal pra ver se está como deveria? E quando o seu programa se torna difícil de testar visualmente? É um problema né? Apresento a você a SOLUÇÃO para os seus problemas: testes automatizados.

Como eu faço isso tio?


É simples! Usando bibliotecas próprias para testes, criamos nossos testes baseados em como o programa deve funcionar. Eles podem ser escritos depois do próprio código ou antes. A prática de escrever testes ANTES é extremamente útil. Com ela você já define como será a interface, a nível de código, das suas classes e funções, e precisa codificar somente o suficiente para passar nos testes criados.

Falar é fácil né? Faz ai, quero ver!


Então tá. Mostrarei um exemplo em Python, por ser simples, mas existem bibliotecas de testes para Java, C, C#, Ruby, etc... basta procurar. O intuito aqui não é comparar as ferramentas de testes de linguagens, mas sim mostrar como testes automatizados podem facilitar (muito) a sua vida. Suponhamos que temos o seguinte código a ser testado:

[python]

class Calculadora(object):

@staticmethod

def soma(num1, num2):

return num1 + num2

[/python]

Podemos escrever os testes da seguinte maneira:

[python]

import unittest # biblioteca responsável pela suíte de testes

from should_dsl import * # biblioteca que disponibiliza matchers mais legíveis

from calculadora import Calculadora # importando a nossa classe a ser testada

class CalculadoraTest(unittest.TestCase):

def testa_soma(self):

calculadora.soma(1,1) |should| equal_to(2)

if __name__ == '__main__':

unittest.main()

[/python]

Para rodar os testes é só executar o arquivo que os contém. Não é LINDO? Este é um caso muito simples, mas existem casos de programas complexos que seria completamente inviável ficar testando no "olho". Os testes automatizados te dão um feedback instantâneo (dependendo do que está testando e da quantidade de testes feitos) da aplicação. Em pouquíssimo tempo você sabe se aquela modificação que você acabou de fazer funciona ou não, com o simples uso de 1 comando e sem dor de cabeça.

Python é lindo! Do que eu preciso para criar aplicações com testes no meu PC? *-*


Primeiramente, precisa do Python instalado, claro. A biblioteca unittest já está incluída por padrão juntamente com o interpretador. Para instalar a biblioteca should_dsl é só executar:

 [sudo] pip install should_dsl 


Ou, se você o easy_install:

 [sudo] easy_install should_dsl 


Agora você já pode começar a parar de ficar imprimindo coisas na tela para "testar" e começar a fazer isso de verdade! Quando você começar a usar, nunca mais vai querer parar! É viciante e ajuda demais.

Gostei, onde encontro mais informação sobre testes em Python?



Na própria documentação do UnitTest: http://docs.python.org/library/unittest.html
No tutorial DiveIntoPython: http://diveintopython.org/unit_testing/

E no Google. :D

Bom, por enquanto é só isso amigos... até a próxima!

1 comentários:

  1. Douglas, desculpe o off-topic, mas foi o unico modo que encontrei de falar com vc...
    Cara, vi varios posts seu, e vi que vc manja de programação e tal...
    Sera que pode me ajudar?
    É que intalei o mod cyanogen 6 (froyo 2.2) no meu millestone, e to na frança... comprei um chip pre-pago daqui, mas nao consigo conectar à rede francesa. pede um codigo PIN para se conectar à rede. Tentei o pin que vem com o chip, mas nao da.
    Será que pode me ajudar?
    abcs

    ResponderExcluir