Testes · Wiki · adega / adega · GitLab
Last edited by Jomaro Rodrigues Apr 04, 2018
Testes unitários são pequenas funções que testam o retorno de outras funções. O objetivo é escrever vários desses pequenos testes para cada função usada em um sistema. Ao testar várias combinações de entrada se cria uma confiança de que a dita função funciona como planejado. Essas funções de teste não são apagadas depois de usadas e são feitas para serem gerenciadas por uma ferramenta (framework) de testes. Então qualquer pessoa pode executar o framework e testar todas as funções do projeto inteiro em segundos e vai saber na hora se o código que ela acabou de escrever quebrou alguma coisa no sistema. Fácil, automático, bem padronizado e com bons relatórios por parte do framework.
Os frameworks para testes em geral são chamados "alguma coisa unit". Tem o Junit pra Java, o PHPUnit pra PHP e por ai vai. O framework mais usado pra Python é o unittest que funciona pra testar funções. E o Django extende um pouco o unittest colocando ferramentas pra testar, por exemplo, se um usuário que não fez login pode acessar a página de informações de um aluno (spoiler: não deve poder). Só ai já são 2 funçõezinhas de teste: se o usuário logado vai poder acessar; se o não logado vai ser corretamente encaminhado pra página de login. E isso vai ter que ser feito pra cada view do projeto.
Além de você rodar esses testes na sua máquina, eles também serão executados no gitlab (os pipelines). É isso que dá a confiança de que o novo código não quebrou o sistema e é a confiança necessária pra tornar possíveis metodologias como continuous delivery e continuous integration. Dependendo do resultado disso no projeto, iremos configurar o servidor para automaticamente colocar em produção commit's que passarem nesse teste (continuous integration).
Uma prática de desenvolvimento de software chamada TDD estimula desenvolvedores a escrever os testes para uma função antes mesmo de escrever a dita função. Isso da mais clareza à interface de chamada e retorno da função.
Cuidado para sempre ler a documentação da versão correta do django, a 1.11
O coverage é uma ferramenta que ajuda a saber quanto do seu código está sendo testado pelos testes unitários. Tudo pode ser aberto no navegador e analisado visualmente.
Mas, a ferramenta não funciona 100%. Por exemplo, no código abaixo ele vai atestar 100% de cobertura de testes quando na verdade o resultado da função funcC nunca é testado. Ele faz isso por que não enxerga realmente o que foi testado ou não, só o que foi executado ou não. Tenha em mente essa limitação quanto fizer seus testes, não deixe que a não cobertura de funções seja camuflada desse jeito.
def funcC(x):
return (funcB(x), funcC(x))
e = funcA(13)
self.assertEquals(26, e[0])
Dicas do projeto
Vai haver uma base de testes em algum ponto num futuro próximo. Um arquivo excel com a mesma estrutura do atual. Nesse momento siga essas orientações:
não altere dados na base de teste, isso pode quebrar os testes de outras pessoas. Somente adicione os novos dados que você precisa
não teste a quantidade de linhas retornadas, pode ser que alguém adicione um novo elemento que também passa pela sua filtragem e o seu teste vai quebrar