F.I.R.S.T. Test Unit
- #Testes unitários
- #.NET C#
Mas afinal, o quê são testes unitários?
Testes Unitários são testes automatizados de pequenas unidades de códigos que são testados de forma isolada. Essencialmente, um teste de unidade é um programa que chama os métodos (públicos) de uma classe e verifica se o resultado é o esperado.
E quais são os benefícios do teste de unidade?
Torna possível encontrar bugs ainda na fase de desenvolvimento. Tal benefício garante economia pois se os bugs forem encontrados ainda em fase de produção, o custo de correção e as perdas são maiores! Além disso, tais testes ajudam a evitar que alterações no software criam novos bugs.
Ok, mas o quê é esse F.I.R.S.T.?
F.I.R.S.T. é um acrônimo em inglês, que estabelece regras de boas práticas e testes limpos baseado nos conceitos de Clean Code. O significado para cada letra definem as regras que são respectivamente Fast, Indepedent, Repeatable, Self-validation e Timely. A seguir temos a disposição de cada regra de acordo com o acrônimo:
- Fast (Rápidez): Os testes unitários devem ser executados em questão de segundos, caso contrário está havendo mais complexidade do que deveria, portanto não será um teste de unidade;
- Indepedent (Independência/Isolamento): Cada teste dese tratar de apenas um caso de uso previsto, para que seus resultados não sejam influenciados por nenhum outro fator;
- Repeatable (Repetibilidade): Os testes devem ser repetíveis e determinísticos, ou seja, todo teste deve poder ser executado mais uma vez e os resultados devem permanecer os mesmos a cada execução, independente do ambiente de testes;
- Self-validation (Autovalidação): Não deve haver necessidade de verificar manualmente os valores e cada teste em si deve dizer por si só se houve falha ou não;
- Thorough (Minuciosidade): Seu teste deve cobrir todos os "caminhos felizes" de um método, todos os casos extremos (onde você acha que o teste pode falhar), argumentos ilegais, falhas de segurança, valores grandes e etc. Desse modo, é preciso mapear todos possíveis cenários para os casos de uso;
- Timely o T "extra" (Oportunamente): Os Testes Unitários devem ser escritos antes do código ser testado. Isso pode ser feito utilizando a abstração (Interface) com a assinatura dos métodos e na especificação.
Estou convencido, mas quais ferramentas posso utilizar?
Para desenvolvimento de testes unitários em C# com .NET, existem diversas ferramentas que estão disponíveis pelo gerenciador pacotes NuGet, mas a seguir serão apresentadas algumas opções que são altamente recomendadas:
- xUnit: é uma estrutura de teste poderosa e completa para .NET que geralmente é empacotada com o VisualStudio junto com o NUnit. No geral, ambos são bons frameworks, mas o xUnit é mais legível e intuitivo
- Shouldly: é uma ferramenta de asserçãomuito mais intuitiva de afirmar seus resultados de teste do que a classe nativa Microsoft.VisualStudio.TestTools.UnitTesting.Assert. O repositório do github fornece muitos exemplos,
- NSubstitute: é uma ferramenta de simulação (ou em inglês mocking) que ser aplicada em qualquer classe ou interface para que você possa testar facilmente os métodos e também permite utilizar APIs e bancos de dados.
Muito obrigada por ler esse artigo até o final e espero ter ajudado.
Também está estudando TDD e tem mais dicas que podem ajudar nossa comunidade? Não hesite em comentar.
Referências
https://dzone.com/articles/writing-your-first-unit-tests
https://github.com/ghsukumar/SFDC_Best_Practices/wiki/F.I.R.S.T-Principles-of-Unit-Testing
https://medium.com/@tasdikrahman/f-i-r-s-t-principles-of-testing-1a497acda8d6