Testes Unitários com C#


Testes unitários visam automatizar os testes para suas classes de maneira integrada onde todos os métodos sejam testados ao mesmo tempo, garantindo assim o funcionamento de todo projeto.


“Utilizaremos Visual Studio 2010 Ultimate em uma aplicação C# do tipo Class Library, mas acredito que outras versões com exceção da Express, podem ser utilizadas. A proposta deste exemplo é testar uma classe de regras de negócio de calculo de media de aluno”

Antes de mais nada, simularemos uma documentação bem simples para nosso projeto que servirá para criarmos nossos testes.

CALCULO DE MÉDIA DE ALUNO

Nome da classe: CalcMedia

Objetivo: Calcular média de um aluno inserindo notas de quatro provas, inserir pontos negativos e positivos. Esta classe deverá conter o nome do aluno, um contador de notas de provas, um contador de pontos, uma variável para pontos decorridos ganhos, uma variável para soma das provas.

Métodos:

InserirNotaProva(decimal nota): retorno vazio

Descrição:

Insere a nota da prova, deverá ter um controle da quantidade de notas que este método irá acrescentar, uma exceção deverá ser lançada caso o contador de provas ultrapasse quatro.

InserirPonto(decimal ponto): retorno vazio

Descrição:

O aluno poderá receber pontos decorridos de atividades extra-prova, num valor máximo de quatro pontos. Caso ultrapasse esse valor, deverá ser lançada um exceção.

CalcularMedia(): retorno decimal

Calcula a média final no aluno somando dividindo por quatro o total da soma das notas da prova;


Baseado nessa simples documentação acima, criaremos nosso projeto do tipo class library no visual studio, chamado CalcularMedia. Neste projeto deverá ser criada uma classe chamada CalcMedia com as assinaturas de métodos conforme documentação acima.

A classe deverá ficar como a seguir

Adicionaremos a solution agora nosso projeto de testes conforme sequencia a seguir.
Clique em File > Add > New Project. Nos templates, clique em Test e adicione um Test Project conforme imagem a seguir.

Adicione o nome desejado ao seu projeto de testes, compile toda solução e depois adicione ao seu projeto de testes uma referência ao projeto CalcularMedia para que possamos acessar o assembly que contém os métodos que desejamos realizar testes.
Clique com o botão direito do mouse na solução no projeto de testes na pasta References > Add Reference e na aba Projects, escolha o seu projeto e clique em ok.

O projeto de testes deverá ficar conforme figura abaixo:

Substituiremos os métodos atuais e criaremos novos para realizar testes nos métodos da classe do projeto CalcularMedia conforme imagem a seguir:


O namespace using Microsoft.VisualStudio.TestTools.UnitTesting é um framework da Microsoft criado especificamente para testes unitários, ali teremos métodos para realizarmos nossos testes.

Agora cabe ao desenvolvedor uma noção da elaboração dos testes, por exemplo: Ao se calcular uma média de quatro notas inseridas, entende-se que deve-se somar as quatro notas e dividir por quatro, então se as notas inseridas forem 5, 7, 8 e 3, teremos então somando os números o valor 23 que dividindo-se por quatro resultará na média 5.75. Então esperamos que nosso método CalcularMedia retorne 5.75, a partir dai utilizaremos métodos do framework de testes que comparará os valores retornados indicando que o método esta correto. Vamos então implementar os métodos!?

O primeiro método a ser implementado será o método InserirNotaProva, entendemos que ao inserir uma nota de prova, a variável interna SomaProvas, terá o valor da primeira nota inserida, a implementação fica como a seguir.

O que fizemos foi passar um valor que sabemos que nosso método da classe CalcTest, internamente irá armazená-lo, então verificamos se este  foi feito corretamente. Clicando no corpo do método de testes podemos utilizar o atalho ctrl+ r + t ou clicar com o botão direito do mouse e Run Test, e o projeto de testes, irá testar nosso método e abaixo no Test Result, teremos o resultado se o teste passou ou não conforme a seguir:

Implementaremos agora os dois métodos seguintes e rodaremos todos os testes ao mesmo tempo.

Implementação

Rodando os testes clicando no corpo da classe e run testes testamos todos os métodos ao mesmo tempo conforme a seguir.

Opa, um dos testes retornou erro? vamos verificar?

O teste retornou erro porque o método da classe CalcMedia não correspondeu a expectativa do método de testes…

Você consegue achar o erro e consertar??? Assim que o fizer, rode novamente.


Viram agora? perceberam o poder de testes unitários? Mas não acabou por ai, esperem a segunda parte dos testes.

 Aproveite e visite meu site pessoal http://aldocosta.com.br