A qualidade do software é uma das variáveis mais complexas de um software. Vai desde o processo administrativo até o padrão de código aplicado. Qualquer dia eu falo de qualidade e outras coisas do gênero; hoje vou falar apenas sobre uma pequena fatia dessa torta: Testes Unitários.
Testes unitários são aplicados as unidades de código, como funções, propriedades, procedures e semelhantes. Veja uma código de exemplo de uma calculadora simples, como exemplo.
namespace calculadora { public class Calculadora { int soma(int i, int j) { return i + j; } int multiplicacao(int i, int j) { return i * j; } int subtracao(int i, int j) { return i – j; } int divisao(int i, int j) { return i / j; } } } |
Parece um código simples demais para um programador vacilar e cometer erros. Mas, vamos ver.
Como seria um teste unitário?
Veja um teste unitário aplicado a calculadora do exemplo:
[TestMethod()] public void CalculadoraConstructorTest() { Calculadora target = new Calculadora(); } [TestMethod()] [DeploymentItem(“calculadora.exe”)] public void divisaoTest() { Calculadora_Accessor target = new Calculadora_Accessor(); int i = 50; int j = 2; int expected = 25; int actual; actual = target.divisao(i, j); Assert.AreEqual(expected, actual); } [TestMethod()] [DeploymentItem(“calculadora.exe”)] public void multiplicacaoTest() { Calculadora_Accessor target = new Calculadora_Accessor(); int i = 50; int j = 2; int expected = 100; int actual; actual = target.divisao(i, j); Assert.AreEqual(expected, actual); } [TestMethod()] [DeploymentItem(“calculadora.exe”)] public void somaTest() { Calculadora_Accessor target = new Calculadora_Accessor(); int i = 50; int j = 2; int expected = 52; int actual; actual = target.divisao(i, j); Assert.AreEqual(expected, actual); } [TestMethod()] [DeploymentItem(“calculadora.exe”)] public void subtracaoTest() { Calculadora_Accessor target = new Calculadora_Accessor(); int i = 50; int j = 2; int expected = 48; int actual; actual = target.divisao(i, j); Assert.AreEqual(expected, actual); } |
Parece muito simples e fácil. Parece até mesmo desnecessário de tão óbvio. Entretanto, este teste está incorreto. Ele não considera que a classe Calculadora poderia realizar divisões por zero ou gerar estouros de buffer. Num projeto com diversas classes e chamadas os testes unitários ganham destaque.
Porque os testes unitários não garantem qualidade?
Não garantem porque o número de variantes de testes possíveis é grande demais. E a avaliação sobre que testes devem ser feitos e como devem ser feitos é humana, e não automática. A variável humana insere infinitas incertezas aos projetos de teste.
Porque utilizar Testes Unitários?
Eles são úteis para melhorar a qualidade dos softwares. Quando um software é modificado é comum perceber vários problemas decorrentes da alteração. Uma modificação impacta diversas coisas que nem sempre são pensadas pelos programadores, em primeiro momento. Aí que entra o teste unitário. É possível, automaticamente rodar todos os testes unitários e saber o impacto unitário da modificação realizada.
Passo a Passo: Como Fazer Teste Unitário no Visual Studio?
Novo Projeto |
Projeto de Teste |
Projeto de teste criado |
Adicionar > Teste Unitário |
Wizard para criação de Testes Unitários |
Projeto criado pelo wizard |
Projeto Alterado para refletir a realidade |
Testes realizados pelo Visual Studio |
Ele atua/atuou como Dev Full Stack C# .NET / Angular / Kubernetes e afins. Ele possui certificações Microsoft MCTS (6x), MCPD em Web, ITIL v3 e CKAD (Kubernetes) . Thiago é apaixonado por tecnologia, entusiasta de TI desde a infância bem como amante de aprendizado contínuo.
Gostei
Deu para ter uma ideia básica.