Fala, pessoal. Nesse artigo nós falamos um pouco sobre o que são testes e qual sua importância. Mas hoje, nós vamos falar especificamente sobre alguns tipos de testes unitários e quais seus benefícios. Vamos lá?

O que são testes unitários?

Pra relembrar, vamos do começo: o que são testes unitários? Um teste unitário é a maneira de testar o menor pedaço de código que pode ser logicamente isolado em um sistema, ou seja, cada pequena parte do seu software.

Além disso, os testes também devem testar cenários que não estão propriamente escritos em seu código, mas sim, em uma possível ocasião na qual seja possível que isso aconteça.

Essa é uma forma de conseguir testar cada camada do software, e suas determinadas regras de negócios. Portanto, cada camada deve ser testada individualmente, e com uma bateria repleta de teste, faz com que o máximo de linhas apropriadas para testes sejam devidamente testadas, e com isso a chance de bugs aparecerem diminui drasticamente.

No entanto, mesmo que isso parece algo simples e fácil, não é.

Comparação e Exemplo de Teste:

Para entender melhor, vamos a um exemplo.

Você vai comprar um sapato, logo, irá experimentar (testar) para ver se ele serve, certo? Em seguida, você dá alguns passos para ver se ele realmente é confortável. O sapato está ok, passou no teste, serviu perfeitamente e é confortável.

Porém, você não imaginou alguns cenários que com certeza vai passar como uma meia diferente que pode causar desconforto, correr ou ficar em pé por um período de tempo mais longo.

Isso tudo irá ter uma reação, foram cenários que você não testou, e podem gerar insatisfações com o produto.

Portanto, um método que tem comportamentos definidos, pode reagir em um cenário no qual você não imaginou.

Entendendo isso, já sabemos que os testes não devem ocorrer somente testando seu código em si, mas, diversas possibilidades, como uma requisição que recebe um número identificador como parâmetro. Isso porque você de fato fez para que funcionasse dessa forma, mas talvez, em algum momento da vida desse software ele receba, uma String ou algo inesperado.

Coverage

Existe uma palavra chamada coverage que significa a porcentagem de cobertura de testes por linhas, ou seja, se você tiver 50% de coverage, 50% de todo seu código está sendo testado.

Geralmente essa medida é feita por classes. Existe uma classe, e é medida a porcentagem de coverage nessa classe em específico.

Mas não se engane, quantidade não significa qualidade. Por isso, use o coverage para se basear, e não como um metodologia final. A frase “um software com 90% de coverage está muito bem testado!” nem sempre está correta!

Claro essa quantidade de testes gera uma segurança bem maior do que com poucos testes, porém, não podemos nos basear apenas na porcentagem de linhas cobertas. Isso não irá assegurar que o software está livre de bugs, até porque, tem inúmeros cenários que não estarão no código, e sim, em uma possível atitude inesperada do usuário final.

Qual a média de coverage hoje?

Atualmente as empresas geralmente utilizam a política de em torno de 70% de coverage em seus softwares.

E novamente, isso não é um número fácil de se chegar, principalmente com testes eficazes!

TDD Test-Driven Development

Não tem como falar sobre testes unitários e não mencionar o TDD (Desenvolvimento Orientado por Testes). Com ele, antes mesmo da implementação são criados testes, e somente a partir deles, são implementadas funcionalidades no sistema.

Exemplo: você cria um teste para testar se seu método de cálculo, que tem como objetivo somar 2 valores. Você primeiro cria um teste para esse método e somente depois, cria o próprio método. Isso facilita para que o método esteja muito mais alinhado com o teste.

Então, TDD é uma boa forma de programar? Sim! Para muitos profissionais, é a melhor forma de se ter um software com uma alta qualidade.

Como funciona o TDD?

Primeiramente, o teste é criado com determinada lógica. Obviamente, o teste não passará por não ter essa lógica implementada, então nesse momento, o teste falha.

Então, depois da criação do teste, será implementado o devido recurso para atender a esse teste. Em seguida, será verificado se o teste está passando, e se necessário, será feita um refatoração para que tudo ocorra como previsto.

Conclusão

Portanto, os testes unitários são indispensáveis na etapa de desenvolvimento de software. Com eles, o sistema ganha mais valor, muito mais segurança para encontrar e corrigir bugs e se torna mais fácil de efetuar manutenções!

Além de que, vimos que com o TDD dá até parar desenvolver o software com base em seus testes, o que para muitos é extremamente eficaz e produtivo.

E você, seu sistema está com os testes em dia? Abraço e até a próxima!