Qual a importância de fazer testes?
Fazer testes é algo que deve ser rotina para todo programador, como uma regra, mas, você sabe o motivo? Abaixo, vamos relacionar alguns motivos importantes:
- Qualidade nos entregáveis: o código que chega para o cliente tem a garantia de ser validado e suas as funcionalidades estão de acordo com o que foram implementadas.
- Garantia do comportamento: novas rotinas que impactam em rotinas antigas, assim como alterações em rotinas antigas, têm a garantia de manter o mesmo comportamento, pois é possível detectar os problemas antes de chegar ao cliente, liberando assim, um código mais assertivo.
- Fácil depuração: não é necessário subir um sistema inteiro para verificar o funcionamento, os testes garantem a checagem das rotinas, basta rodar os testes e avaliar o log do resultado da execução.
- Rodar testes a cada liberação: os testes sempre rodam, pois estão na pipeline de liberação de forma automatizada, a cada liberação tudo é testado garantindo a qualidade.
- Baixo custo: os testes automatizados rodam automaticamente, desta forma, diferentemente de um teste manual que precisa rodar rotina a rotina (podendo esquecer algumas, ou até mesmo informar valores diferentes a cada testa), a automatização roda de forma rápida e completa, sem variações.
Importante destacar alguns pontos de atenção, que podem gerar uma falsa percepção no desenvolvedor:
- Codificar coisas demais: o desenvolvedor pode ter a falsa impressão que está codificando coisas demais, já que além da rotina, precisa também implementar o teste para ela, entretanto, isso não é verdade, pois o ganho obtido ao longo do tempo, mitigando impactos futuros no funcionamento desta rotina compensam todo e qualquer tempo investido na análise e implementação do teste.
- MR não aprovados: o programador pode ter a sensação que seus MR não são aprovados, mas na verdade, os testes estão validando e impedindo que alguma alteração corrompa o código já existente.
- Demora para entrega: escrever código a mais, pode causar a impressão de que o prazo para entrega pode ser mais longo, entretanto, isso evita que o desenvolvedor precise de retrabalho na correção de bugs futuros, o que leva um tempo consideravelmente maior do que a implementação dos testes na origem da implementação da rotina.
O que a Tecnologia oferece para testes?
A tecnologia oferece o BEF Integration Tests (BIT) que é uma biblioteca que permite o desenvolvimento de testes de integração para as regras de negócio escritas em BEF, já que ele entrega o contexto do Benner (como se tivéssemos o Provider ou o Runner rodando por trás). Para saber mais sobre o BIT, consulte a nossa WIKI.
Além disso, a Benner possui integração total com os principais frameworks de teste do mercado:
- MSTest: É o mais simples, para usar basta adicionar os atributos [TestClass] (para classes) e [TestMethod] (para métodos), para iniciar a execução dos testes, além disso o Visual Studio já possui um painel para exibir os testes.
- NUnit: É muito popular sendo referência para os testes de unidade. A instalação é feita através do NuGet package. Para usar, usamos os atributos [TestFixture] (para classes) e [Test] (para métodos), tendo a possibilidade de parametrizar os testes com o atributo [TesteCase(“seu parâmetro”)].
- xUnit: Baseado no NUnit é mais flexível e abrangente, para testar basta decorar os métodos com os atributos [Facts] (para métodos sem parâmetros) e [Theory] (para métodos com parâmetros) – não há necessidade de decorar a classe.
Tudo isso, ainda pode ser usado junto com o NSubstitute que vai possibilitar a criação dos mocks (objetos que simulam o comportamento de objetos reais, podendo definir retornos específicos em seus métodos, de maneira que a classe a consumir eles nem note que algo foi alterado), permitindo criar objetos baseados em interfaces definindo contratos de retorno usando a injeção de dependência (que foi assunto de outro BE.TECH).
E os testes unitários?
Fundamentais e primordiais!!! Prefira usá-los sempre que possível já que possuem um melhor desempenho na execução, sem necessidade de configuração das regras de negócio tampouco de banco de dados e similares.
Teste unitário = Teste mais rápido = Teste mais barato.
Para saber mais
Gostou do tema e quer saber mais? Eu gravei uma série de vídeos sobre testes, o primeiro iniciando com os conceitos básicos:
Para ver a trilha de testes inteira, basta acessar a Trilha de Testes no YouTube.
Além disso o Alessando Vieira de Souza apresentou um BE.TECH com muita dica e mão na massa (o vídeo ficou sem a abertura e fechamento pois o YouTube criticou a nossa trilha sonora😑, mas o conteúdo está íntegro):
No nosso BE.TECH falando de testes, também surgiu a dica de um livro: Trabalho Eficaz com Código Legado do Michael C. Feathers.
Sem contar toda a documentação presente na nossa Wiki.
Com essas dicas, e todo esse material, com certeza você vai ficar um ninja em testes além de querer implementar testes para tudo!
Te vejo na próxima, um abraço,
Danton C. Franco Junior
#TimeTec