Palavras-chave: testes, unittest, docstring, documentação, testes unitários, rest, docutils
Todo desenvolvedor sabe que fazer testes é superimportante e que fazer documentação também é algo que melhora a qualidade de seus produtos. Mas num primeiro momento, fazer testes é trabalhoso e documentar o nosso código também costuma ser muito chato.
E se a gente conseguisse fazer as duas coisas ao mesmo tempo e obter bons testes e boa documentação? Com o módulo doctest do Python é possível fazer isso. Veja o exemplo abaixo (que foi parcialmente tirado da documentação do módulo):
# -*- coding: utf-8 -*-
import doctest
def fatorial(valor):
"""fatorial(int) -> int
A função fatorial pode ser usada para calcular
o fatorial de um número n onde n > 0 vejam os exemplos::
>>> fatorial(15)
1307674368000L
>>> fatorial(-1)
Traceback (most recent call last):
...
ValueError: valor precisa ser > 0
>>> fatorial(15.1)
Traceback (most recent call last):
...
ValueError: valor precisa ser inteiro
"""
if valor < 0:
raise ValueError("valor precisa ser > 0")
if not isinstance(valor, (int,long)):
raise ValueError("valor precisa ser inteiro")
if valor:
return valor * fatorial(valor - 1)
return 1
if __name__ == '__main__':
doctest.testmod()
Agora, para rodar nossos testes basta executar esse exemplo:
$ python fatorial.py -v : 1 items passed all tests: 3 tests in __main__.fatorial 3 tests in 2 items. 3 passed and 0 failed. Test passed.
Além de colocar os testes dentro das docstrings também podemos usar arquivos texto convencionais para essa mesma finalidade. A documentação pode usar o formato ReST usado pelos utilitários docutils.





Algumas semanas atrás, enviei um patch para o motiro (uma ferramenta semelhante ao trac, mas feita em rails). Quando enviei o patch, logo o cara me interpelou: ‘Onde está o teste?’
Uma vergonha: até hoje eu não integrei testes de uma forma consistente na minha rotina!