Por que você deveria criar testes?
Tags: programming, portugues, braziliandevs, beginners
Published: 2022-01-12 14:50:16

Se você não testa os softwares que cria por achar que isso atrasa o desenvolvimento, ou ainda: porque não gosta, ou até porque mesmo desconhece... esse post é para você! Se esse não é o seu caso, fique a vontade para compartilhar suas experiências nos comentários.

---

Venho programando a um tempo e fazia parte de um dos grupos citados acima. Eu desconhecia os testes e por isso não conseguia enxergar o valor de se testar o código. Claro, muitas vezes já tinha ouvido falar sobre, mas nada além disso.

Um tempo atrás me vi na seguinte situação: Um de meus clientes já possuía um sistema em produção. Este sistema funcionava de maneira diferente para cada tipo cliente, em outras palavras:

- O _cliente A_ utiliza os módulos 1, 2 e 3.
- O _cliente B_ utiliza os módulos 2, 3 e 4.

Algumas funcionalidades estão em funcionamento em um e em outro não. Bem, eu fui convidado para dar continuidade no sistema e *dá-lhe commit*! Começamos a desenvolver e subir atualizações, corrigir bugs, mais atualizações, quebra alguma coisa, correção, atualização... num ciclo eterno.

![Bugs everywhere](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oo4rxqtwihjfn1aer5po.png)

Programar para mim é uma **paixão**, e se você está lendo isso, provavelmente esse também é o seu caso. Portanto criar coisas novas, desenvolver uma ideia, tirar as coisas do papel e transformar em código é algo mágico! Por outro lado corrigir bugs, voltar a mexer em código que já havia sido finalizado é um **pesadelo**. Imagine criar uma nova funcionalidade num dia, daqui a dois dias ela está dando problema, você então corrige e daqui a uma semana volta a dar problema de novo.

![](https://cdn-images-1.medium.com/max/800/0*q7JmDatfyeKb3-Vp)

**É ai que se encaixam os testes de software! :D**

Disse uma vez, [em uma publicação](https://dev.to/tadeubdev/refatoracao-e-mudancas-no-codigo-2c69), que muitas vezes nos vemos frustados tentando desenvolver coisas "do nosso jeito", quebramos a cabeça tentando reinventar a roda sendo que alguém já passou por algo parecido muitas e muitas vezes e já desenvolveu com base em estudo atrás de estudo, uma forma de resolver tal problema. Esse é o caso dos testes!

Quando comecei a pensar sobre o assunto fiz um curso do @cviniciussdias na [Alura](https://cursos.alura.com.br/course/phpunit-tdd?preRequirementFrom=php-mocks). Aliás, se quiserem **10% de desconto**, vocês conseguem através do meu link: [promocao/tadeubstar](https://www.alura.com.br/promocao/tadeubstar). Foi aí que comecei a entender o valor do teste.

Diversas pessoas já passaram pela mesma coisa que passamos todos os dias e viram que testar o código é algo importante. Logo: por que não testar o nosso código?

---

Vamos imaginar o seguinte cenário: pediram para que você desenvolvesse uma função em javascript que levasse em conta os seguintes requisitos:

- A função deve calcular o desconto para um usuário;
- Ela irá receber um usuário e um valor qualquer em float;
- Se o usuário for de nivel 1, ele não deve receber descontos;
- Se o usuário for de nível 2, deve receber 10% de desconto;
- Já se ele for de nível 3, deve receber 20% de desconto.

Bem, poderíamos fazer o seguinte:

```js
function calculaDescontoParaUsuario(usuario, valor) {
  if (usuario.nivel === 2) {
    return valor * 0.10;
  }
  if (usuario.nivel === 3) {
    return valor * 0.20;
  }
  return valor;
}
```

E para validar que tudo funciona, poderíamos criar um arquivo chamado: `testa-calculo-de-desconto-do-usuario.js`.

```js
const usuario = {
  nivel: 0
};
const valor = 100;

// valida usuario de nível 1
usuario.nivel = 1;
if (calculaDescontoParaUsuario(usuario, valor) === 100) {
  console.log('- Tudo certo com o nível 1 =D ')
} else {
  console.log('- Ops! O valor está incorreto no nível 1 =/')
}

// valida usuario de nível 2
usuario.nivel = 2;
if (calculaDescontoParaUsuario(usuario, valor) === 90) {
  console.log('- Tudo certo com o nível 2 =D ')
} else {
  console.log('- Ops! O valor está incorreto no nível 2 =/')
}

// valida usuario de nível 3
usuario.nivel = 3;
if (calculaDescontoParaUsuario(usuario, valor) === 80) {
  console.log('- Tudo certo com o nível 3 =D ')
} else {
  console.log('- Ops! O valor está incorreto no nível 3 =/')
}
```

E dessa forma garantimos que todas as vezes que rodarmos o segundo script, nossa função irá retornar os valores corretos. Bem, isso foi só uma demostração, existem centenas de ferramentas de software e no próximo post iremos falar sobre elas!

Se você gostou deixe o seu like, ajuda muito! =D
Até o próximo post!