Manual do Desenvolvedor - Testes
1. Introdução
O que é esse negócio de testes mesmo?
"Eu sei que eu deveria escrever testes, mas ...
- ... eles levam muito tempo para serem escritos
- ... eu sou um bom desenvolvedor
- ... meu cliente ou a comunidade testam por mim"
Parece familiar? Não importa quão bom você ache que é, você comete erros. Seu código conterá bugs e alguém virá até você exigindo uma explicação. Sem uma forma metódica de testar, você não estará garantindo seu código com nada além de achismos e arrogância. Sair clicando na interface do Plone, alguns minutos antes de enviar seu código para os usuários, simplesmente não é o suficiente.
Testar é uma arte, e é preciso que esta esteja presente em seu ciclo de desenvolvimento deste o princípio. Não é algo que você deva fazer depois de que todo o resto esteja finalizado, mas sim que se faça continuamente. Infelizmente, muitas vezes testar causa um sentimento de pavor nos desenvolvedores. É lento e chato. Mas essa arte evoluiu e há uma dose considerável de elegância e diversão em se aplicar estratégias de testes bem concebidas.
Este tutorial tem o objetivo lhe prover as ferramentas que você precisa para escrever testes e software testável no Plone. Se você está escrevendo software para o core do Plone, nem pense em commitar qualquer correção ou funcionalidade sem uma cobertura de testes. Se você está escrevendo um produto ou customizando algo, manter-se com os mesmos padrões elevados de que o time do core do Plone pratica, lhe dará uma melhor confiança em seu software e vai lhe poupar de muita dor de cabeça do futuro.
Exemplos
Este tutorial contém diversos exemplos de vários tipos de testes. Eles estão disponíveis no pacote example.tests, que você pode instalar comom um egg de desenvolvimento utilizando o buildout. Os exemplos de execução de testes utilizam os comandos padrão para buildouts, visto que esta é a única maneira confiável no Windows (isto é, teste zopectl não funciona no Windows).
Consulte o tutorial do buildout para mais informações.
2. Um breve exemplo
Apenas para que você saiba do que estamos falando
Tente encontrar o bug no seguinte trecho de código:
class Employee(object):
def __init__(self, name, position, employee_no=None):
self.name = name
self.position = position
self.employee_no = employee_no
salaries = {0: 12000,
1: 4000,
2: 8000,
3: 4000}
def print_salary(employee):
if employee.employee_no:
salary = salaries.get(employee.employee_no, 0)
print "You make EUR %s." % salary
else:
print "You're not an employee currently."
