Quando Escrever Testes de Unidade?💡
Tags: testing, javascript, jest, beginners
Published: 2024-04-06 17:47:50

Escrever testes de unidade é como se preparar para uma prova: você estuda um tópico e faz um teste para ver se realmente aprendeu. Existem **duas formas principais** de fazer isso:

1. **Depois de Programar**: Você cria uma parte do seu programa, como uma função que soma dois números. Depois de fazer isso funcionar, você escreve um teste que verifica se, quando você _soma_ 2 e 2, o resultado é _realmente_ 4. Você continua assim, criando mais partes do seu programa e escrevendo testes para cada uma.
2. **Antes de Programar (TDD)**: Esse é o método [Test-Driven Development (Desenvolvimento Orientado por Testes)](https://www.devmedia.com.br/test-driven-development-tdd-simples-e-pratico/18533). Aqui você faz ao contrário: escreve o teste para a função de soma antes mesmo de fazer a função. Claro, o teste **vai falhar**, porque a função ainda não existe. Depois, você cria a função de forma que faça o teste passar. Isso ajuda a manter o **foco** em fazer apenas o necessário para que a função cumpra sua tarefa.

---

Além de escrever testes antes ou depois de desenvolver, tem mais duas maneiras inteligentes de usar os testes de unidade:

1. **Quando Aparecer um Bug**: Imagine que alguém te conta que encontrou um erro no seu programa. Uma ótima maneira de começar a resolver isso é escrevendo um teste que mostra esse erro acontecendo. Assim, você tem um teste que falha porque o programa não está fazendo o que deveria. Depois, você conserta o erro e, se o teste passar, você não só corrigiu o problema como também ganhou um novo teste para garantir que esse erro não volte a acontecer no futuro.
2. **Durante a Depuração**: Se você está tentando entender por que uma parte do seu programa não está funcionando, resistir à tentação de só jogar um monte de **`console.log`** para ver o que está acontecendo. Em vez disso, é melhorar escrever um teste que verifica o comportamento que você está tentando consertar. Isso te ajuda a ser mais sistemático na depuração e ainda te deixa com um teste útil no final.

---

E sobre quando **não** escrever testes de unidade?

- **Não deixe para o final**: Esperar até que todo o programa esteja pronto para começar a testar geralmente não é uma boa ideia. Isso porque você pode acabar fazendo os testes com pressa e de forma **superficial**, ou pior, pode acabar não fazendo os testes de jeito nenhum. Além disso, testar tudo de uma vez pode ser muito mais **complicado** e **menos eficiente** do que testar pedacinho por pedacinho à medida que você constrói o programa.
- **Não divida a responsabilidade**: É tentador pensar que alguém pode fazer o programa e outra pessoa pode testá-lo. Mas na verdade, é super **importante** que quem escreveu um pedaço do código também escreva os testes para esse código. Isso ajuda a garantir que os testes estão cobrindo o que realmente importa e que o desenvolvedor entende profundamente como seu código deve funcionar.

Por fim, usar testes de unidade ao longo do desenvolvimento do seu programa não só **ajuda** a encontrar e corrigir problemas mais rápido, mas também te dá a **segurança** de que as mudanças que você faz não quebram coisas que já estavam funcionando.

---

## Benefícios 🚀

1. **Encontrar Bugs Cedo**: A ideia é pegar os problemas enquanto você ainda está **desenvolvendo**, antes de tudo ficar mais complicado (e caro) para consertar. Se você tem bons testes, é menos provável que erros chatos surpreendam você ou seus usuários lá na frente.
2. **Evitar Regressões**: Uma "regressão" é quando você muda alguma coisa no código para melhorar ou adicionar algo novo, mas acaba estragando outra coisa sem querer. Com testes de unidade, se você fizer uma mudança que cause uma regressão, provavelmente vai **descobrir** rápido porque um dos seus testes vai falhar.
3. **Documentar e Especificar**: Além de te ajudar a não quebrar coisas, os testes também contam uma **história** sobre como seu código deve se comportar. Se alguém quiser entender melhor uma parte do seu programa, pode começar olhando os testes para ver o que esperar dele. É quase como se os testes fossem um **manual de instruções** que mostra como usar e o que esperar do seu código.

---

Mas e no **mundo real?** Empresas gigantes como Google e Facebook levam os testes de unidade **super a sério**. No Google, por exemplo, eles não deixam nem o código entrar sem ter testes junto. Eles acham tão importante que têm até ferramentas que te **lembram** de escrever os testes. No Facebook, os engenheiros também são responsáveis por testar seus próprios códigos e por garantir que novas mudanças não quebrem nada que já estava funcionando.

Então, os testes de unidade não são só uma coisa teórica legal para "projetos escolares". Eles são usados **o tempo todo**, em grandes projetos reais, para manter tudo funcionando suavemente e para evitar surpresas desagradáveis.

---

A maior parte desse conteúdo veio do livro "Engenharia de Software Moderna", escrito por Marco Tulio Valente. Esse livro é um tesouro cheio de dicas sobre como criar testes do jeito certo, usando o que tem de mais novo e eficiente no mundo da programação. Entretanto, a única diferença, é que o livro é em Java e aqui eu adaptei para utilizar Javascript.

---