Você ainda não escreve teste unítários, ou melhor testes de unidade?

Olá pessoal hoje vamos fala um pouco sobre teste de unidade, quando começamos a estudar os teste, ou melhor a escrever os nossos teste surgem várias dúvidas em nossa cabeça, é isso que vou tentar responder a vocês, baseando se nas experiências inicias que tive ao escrever meus primeiros teste.

Este post foi escrito originalmente em Você ainda não escreve teste unítários, ou melhor testes de unidade?

Antes de tentar responder algumas das principais dúvidas que surgem ao iniciar nos teste de unidade, vou voltar um pouquinho na história, ou melhor na minha história de desenvolvedor e dizer como eu testava as coisa mirabolantes que eu programava.

Quem já foi meu aluno na faculdade anos atrás lembra destes números 171099, eles representam pra mim, minha total falta de conhecimento sobre testes e para vocês talvez também represente isso, o motivo? simples!

Esses números formavam a senha que eu digitava toda vez na tela de login(minha senha padrão) quando abria algum software que estávamos desenvolvendo, como sempre começávamos pela tela de login por ser mais didática, para encurtar, fazia uma nova tela no sistema copilava, logava no sistema, abria a tela e fazia o teste da tela para vê se a funcionalidade implementada estava funcionando, e isso as vezes se repetia por várias vezes por tela, chegando ao ponto de já deixar o usuário/senha digitados nas propriedades text dos inputs para facilitar a não digitação da mesma na tela de login.

Contei essa história para ilustrar como é difícil ficar repetindo vários passos manualmente para testar as funcionalidades de um sistema, principalmente se não utilizarmos as técnicas corretas. Alguém ai já fez isso? não minta! É comum testarmos tudo que programamos, tipicamente escrevemos programas simples de controle que nos permitisse interagir manualmente com os programas que havíamos escritos, então porque não fazer da maneira correta e principalmente de forma automatizada?!

Porque escrever teste de unidade?
Como fico sabendo se meu software não possui problemas? Simples meu caro, Testando! podemos testar nosso software de várias maneiras: teste de integraçãoteste de aceitaçãoteste de carga (stress) e claro o que é implementado por nos meros desenvolvedores, os teste de unidade.

Acredito que o principal motivo seja nos encorajar a não ter medo, isso mesmo, ficamos mais corajosos e saímos refatorando o sistema e criando novas funcionalidades, pois sabemos que vai ter um teste para nos proteger.

Outro motivo que gosto bastante é que se o teste esta bem escrito, o nosso software já esta documentado! Nada mais fácil de entender como funciona uma rotina do que ver na pratica a sua aplicação e os testes nos ajudam nisto.

O que eu testo?
Essa é uma pergunta que acho complicado responder, prefiro inverte-lá: o que eu não testo? Tudo que ja foi testado, hum!? Simples não preciso testar se um objeto vai ser instânciado, pois alguém já fez isso quando escreveu a linguagem que você está utilizando, não preciso testar se um insert vai mesmo inserir no banco, pois isso vai acontecer. O que você testa é seus métodos públicos, apesar de ter quem diga que devemos testar até nossos métodos privados. Teste tudo e busque sempre o 100% de cobertura do seu código, mesmo que isso seja praticamente impossível.

Nosso teste deve examinar o comportamento do nosso código, por exemplo, se determinado parametro foi passado, o que nosso metodo retorna, se aconteceu alguma exceção, qual o efeito que ele causa durante sua execução e etc.

Como utilizamos na maioria códigos orientados a objeto (OO), estes teste devem testar nossas classes, um teste unitário, tipicamente, testa aquele e somente aquele método, evitando acesso à outros recursos como sistema de arquivos, banco de dados, rede etc. Para testar esses recursos podemos usar stubs e/ou mocks.

Eu até queria escrever testes mas minha equipe/time não quer, como convence-los?
Você não precisa convencer ninguém a escrever testes, você precisa dar o exemplo, comece escrevendo seus testes isso vai facilitar muito sua vida e a manutenção do sistema que você está escrevendo, e na hora que o time se der conta, todos já estarão escrevendo testes, é viciante, basta começar!

E para concluir, é importante realçar que os códigos de testes são tão importante nos nossos sistemas quanto o código de produção, os teste não são componentes secundário de nossos softwares, os testes requerem raciocínio de nossa parte, planejamento e cuidado. É preciso mante-lo tão bem escritos quanto o código de produção.

Como cita o livro Clean Code nossos testes precisam de 3 coisas, legibilidade, legibilidade e a ultima não menos importante legibilidade, então vão enfrente e comecem a escrever seus teste, e lembrem-se a prática leva a perfeição.

 

Comentarios

comentarios