Testes unitários importam?

Nataniel Paiva
4 min readSep 26, 2021

Fala galera, hoje quero escrever um pouco sobre testes unitários! Isso mesmo, aquilo que assombra muitos desenvolvedores, mas que na realidade veio só para nos ajudar a não fazer muita “caquinha” em nossos projetos de programação.

Não adianta escrever testes sem entender a sua real importância para o projeto.

O que acontece em muitos projetos é que os devs não conseguem entender o real ganho que ele vai ter lá na frente com a boa escrita dos testes unitários. Mas pense bem, por qual motivo eu que estou desenvolvendo vou:

  • Escrever código para testar outro código que fiz?
  • Ter mais trabalho e por consequência demorar mais tempo para realizar uma entrega?
  • Na pressão, posso entregar mais funcionalidades se eu não escrever os testes!

Quando não entendemos o real ganho que tem em escrever testes unitários também somos defensores da entrega mais “rápida”.

Obs. Sei que em vários projetos infelizmente não se tem tempo e nem orçamento para a escrita dos testes, já passei por isso mesmo entendendo a real importância deles.

Criar testes unitários é semelhante ao hábito de exercitar-se diariamente.

Isso mesmo. Todos nós sabemos que uma vida sedentária a longo prazo é um péssimo negócio, porém a curto prazo é muito bom, pois são pequenas recompensas imediatas o simples fato de não gastar tempo se exercitando. Mas mesmo tendo o conhecimento que o sedentarismo a longo prazo é ruim, não é o suficiente para que façamos exercícios físicos. Mesmo entendendo dos benefícios do teste unitário, você pode acabar não fazendo.

Os testes unitários vão lhe ajudar a médio e longo prazo, nunca a curto prazo.

A curto prazo você sempre vai levar mais tempo para criar uma funcionalidade escrevendo também o teste unitário e isso é normal, pois você terá que escrever mais código e automaticamente levará mais tempo. Porém é algo que pode lhe ajudar e muito a médio e longo prazo inclusive diminuindo problemas em lançar novas features do seu software.

Entendo que os testes vão me ajudar e tenho liberdade/orçamento para fazê-los e agora?

Eu diria simplesmente, vá em frente, desenvolva esse ótimo hábito. Mas quero lhe mostrar na prática em um exemplo simples como os testes podem lhe ajudar e muito ou lhe prejudicar, caso não sejam escritos corretamente.

Entenda que está 100% coberto não quer dizer que o seu teste está te ajudando realmente.

Veja a seguinte classe:

É uma classe simples que salva um objeto de usuário, sabemos que existe uma regra simples nessa classe. Pegar o email e através dele criar preencher um outro atributo chamado username. Ou seja em um email nataniel.paiva@gmail.com por exemplo, a classe vai salvar nataniel.paiva no atributo de username.

Agora vamos olhar para esse teste dessa classe:

Repare que o teste vai passar e o pior, vai deixar a classe com 100% de cobertura. Veja abaixo:

Mas isso é um problema, porque dessa forma o teste não está lhe ajudando, pois imagine que alguém vem no futuro e muda a classe tirando as linhas 13 e 14. Deixando da seguinte forma:

Deixando a classe assim, o teste que implementamos inicialmente vai continuar passando e não alcançando o seu propósito real que é nos avisar caso tenha alguma mudança de implementação no código que escrevemos anteriormente. Agora se você implementar um teste que se alguém por um acaso mudar essa regra, será possível para quem está mudando verificar se era isso mesmo que tinha que fazer ou simplesmente terá que implementar a nova regra no teste em específico.

Os testes nos ajudam, mas podem ser totalmente inúteis se não forem bem utilizados!

Então se você quer melhorar a qualidade do sistema que você desenvolve, é muito importante que você escreva testes que vão lhe ajudar de fato a escrever um software melhor e mais confiável a cada feature lançada.

Espero que eu tenha ajudado alguém! Até mais pessoal!

--

--

Nataniel Paiva

Líder de Engenharia na CWI Software que ama programar e aprender novas tecnologias! Já usei Angular, Laravel, Spring Boot, React Native, Python, Go e etc...