Os testes de unidade atendem a vários propósitos relacionados:
- Verifique se os requisitos estão sendo atendidos;
- Desenvolva especificações mais precisas para o código;
- Teste as unidades funcionais isoladamente;
- Torne o teste de regressão mais fácil (por exemplo, certifique-se de não quebrar o código de trabalho).
Verifique se os requisitos estão sendo atendidos
Por exemplo, estou trabalhando em algum código para exibir o histórico de transações de uma conta bancária. Eu tenho uma exigência de que, se eu obtiver um registro de histórico em que valores de taxa, depósito ou juros sejam maiores que 0, eu os dividi em entradas separadas com seus próprios códigos de transação e descrições. Um método em uma classe é responsável por isso, portanto, escrevo código que chama esse método diretamente (ou, se esse método específico não for publicamente visível, chamo o método que chama o método em teste) com entradas conhecidas para cada caso, e, em seguida, verifique os resultados de cada uma dessas entradas para verificar se as subtransações corretas foram criadas, com os dados corretos.
Desenvolva especificações mais precisas para o código
Ao desenvolver seus testes de unidade, você inevitavelmente descobrirá que os requisitos não cobrem todos os casos possíveis. Por exemplo, tenho outro requisito que diz que se o código da transação for X, faça uma coisa e, se for Y, faça outra coisa. Mas não há nada me dizendo o que fazer se o código de transação não é X ou Y. É um buraco na especificação que precisa ser preenchido, neste caso pelo arquiteto. É uma boa maneira de verificar seu trabalho.
De certa forma, o teste unitário torna-se a especificação para o código.
Teste as unidades funcionais isoladamente
Este é um grande problema. O teste de unidade permite testar seu código enquanto você o está escrevendo ; você não precisa esperar até que todas as peças estejam no lugar antes que o teste possa começar. Se você estiver testando uma parte do código que depende de outra classe ou método, você pode escrever uma implementação fictícia dessa classe ou método que retorna valores conhecidos ou se comporta de uma maneira conhecida, para que você possa testar cenários específicos.
Ele também incentiva você a fatorar seu código de forma mais agressiva, reduzindo dependecies entre componentes, o que torna o código mais fácil de manter e estender.
Torne os testes de regressão mais fáceis
O cenário do pesadelo é liberar um patch que quebra o código de trabalho. Ao executar testes de unidade como parte de cada construção, você protege contra quebras acidentais porque o teste associado falhará. Você pode então analisar a falha e ver se a quebra é real (ou seja, alguém codificado em um bug) ou se o requisito / especificação mudou, e ajustar o teste da unidade de acordo.