Testes Unitários: NUnit & C#

terça-feira, 20 de maio de 2008. | Post Atualizado.

(Comente)


Estou implementando testes automáticos em um novo projeto aqui no cesar, antes de inicar de fato as atividades, estou realizando alguns PoC´s para achar a melhor forma de realizar estes testes unitários automáticos. Andei dando uma busca por alguns frameworks que suportassem o desenvolmento de testes unitários automáticos para C#, de cara achei o NUnit, ele é free e aparentemente bastante usado.

Irei tentar, aos poucos detalhar minha experiência nesta PoC, tanto no uso do NUnit em conjunto com o C#, quanto no uso de outras ferramentas em conjunto também com o C# para a criação de testes automáticos. Minhas dificuldades, descobertas e impressões ficarão registradas aqui.

Bem antes de tudo, o ambiente que estou utilizando é o seguinte: Visual Studio 2008 e o NUnit, após a instalação do itens acima, é so por a mão na massa.

Irei dividir em 4 partes distintas este processo inicial: Configuração, Escrita do Programa, Escrita do Teste, Execução no NUnit, irei explicar as 4 partes de uma forma mais macro, não irei entrar nos detalhes, pois não é o foco aqui, se adotasse esta abordagem esse post iria ser bem longo :)

Configuração

Com o Visual Studio 2008 aberto, no Solutions Explorer pressione o botão direito do mouse e escolha “Add Reference”, logo após em “Browse” informe a localização da nunit.framework.dll do NUnit, que deverá estar no local onde você escolheu instalá-lo, como mostrado na figura abaixo, depois da a indicação, observe que no Solutions Explorer ele irá exibir as referências do NUnit, observe novamente nas imagens abaixo :

image image image

Estes passos, finalizam a parte da configuração, após isso, o NUnit estará devidamente integrado ao Visual Studio, você pode fazer o teste tentando chamar alguns de seus métodos, e verá que o VS irá reconhecê-los e exibir-los na lista de opções (auxílo) que o VS fornece.

Escrita do Programa

Fiz um programa bem simples, de conversão de moedas, para exemplificar o uso do NUnit, adicione o seguinte código ao seu projeto:
[sourcecode language='c#']
using System;

namespace code
{
public class Codigo001
{
public static double p_real = 0;
public static double p_cotacao = 0;
public static double p_resultado = 0;
public static void cotacao()
{
double p_real, p_cotacao, p_resultado;
Console.WriteLine(“valor em real?”);
p_real = Convert.ToDouble(Console.ReadLine());
Console.WriteLine(“cotação do dollar?”);
p_cotacao = Convert.ToDouble(Console.ReadLine());
p_resultado = p_cotacao * p_real;
Console.WriteLine(“Valores informados:\n\nValor em real: R${0}\nPreço da cotação do dollar: U${1}\n\nValor informado em dollar é U${2}”, p_real, p_cotacao, p_real * p_cotacao);
Console.ReadLine();
}

static void Main()
{

cotacao();

}

}

}
[/sourcecode]
Observe que neste código, bem simples, não existe interação alguma com o NUnit, que ocorerá na próxima parte.

Escrita do Teste

Agora chegou o “core” dos testes, é nesta parte onde você irá escrever o código do seu teste, copie e cole o código abaixo em um codefile (.cs) diferente do código escrito acima.
[sourcecode language='c#']
using System;
using NUnit.Framework;

namespace code
{
[TestFixture]
public class Testes
{
[Test]
public void CT001()
{
Codigo001.p_real = 5;
Codigo001.p_cotacao = 5;
Codigo001.p_resultado = Codigo001.p_real * Codigo001.p_cotacao;
Assert.AreEqual(25, Codigo001.p_resultado);

}

}

}

[/sourcecode]
Vejamos o que torna o código acima, interpretável ao NUnit:

1) O pacote framework do NUnit foi incluido/incorporado a este code file, através do using NUnit.Framework;
2) [TestFixture] esta tag informa que a classe a seguir, irá conter um ou mais testes;
3) [Test] esta tag informa a presença de um teste a seguir;
4) Usando o assertion de igualdade Assert.AreEqual(25, Codigo001.p_resultado), o NUnit verificará se o resultado do teste está correto, neste caso ele irá verificar se 25 conicide com o resultado da variável Codigo001.p_resultado.

Compile tudo e salve.

Execução no NUnit

Agora vamos executar este código no NUnit, selecione a opção “Open Project” e selecione o aquivo “Testes.exe” ou o nome que você deu ao seu projeto. Observe que ao abrir o .exe o NUnit identificará todos métodos que estão com a tag [Test], no nosso caso apenas 01:

image

Agora pressione “Run” e verá que teste irá passar.

image

Teste também se o teste falha, no código do teste, altere a linha:
[sourcecode language='c#']
if (Codigo001.p_resultado == 25)
[/sourcecode]
para
[sourcecode language='c#']
if (Codigo001.p_resultado == 15)
[/sourcecode]
o teste irá falhar, pois o cálculo, junto com os parâmetros infornados devem retornar 25, observe:
[sourcecode language='c#']
Codigo001.p_real = 5;
Codigo001.p_cotacao = 5;
Codigo001.p_resultado = Codigo001.p_real * Codigo001.p_cotacao;
[/sourcecode]
O NUnit é carente nos relatórios, pois a única forma que vi ate agora é exportar em um xml, se alguêm souber de alguma outra forma, por favor me avisem, enquanto isso irei procurando em paralelo :)

Bem, é isso, como podem ver, a configuração e a execução dos testes são bastante simples, quanto a eficiência dos testes, isso vai depender muito do quão bom o engenheiro de testes é, em observar cenários apartir do código disponibilizado, e isso acontece aos poucos, no cenário abordado neste post, existem vários outros pontos a serem testados, mas apenas 1 foi exemplificado.


    


Gostou? assine o feed | Discordou? opine! ou entre em contato

5 Opinioes

     
    Gravatar





    fernando
    02-02-2010


    Muito bom…

    Irá me ajudar de mais!

    ;D

     
sites que referenciam este post (trackbacks e pingbacks)

  • Testes Unitários com componente do .NET | ...zezologs
    [...] A última PoC que realizei e publiquei aqui no blog foi no uso do NUnit. [...]

  • Testes Unitários com csUnit | ...zezologs
    [...] Devido a esta razão nao vou mostrar o código do teste novamente, pois vocês pode vê-lo aqui. [...]

  • Executando Testes com o MSbuild | ...zezologs
    [...] Proseguindo…usarei o mesmo código que venho utilizando nos exemplos passados em “Testes Unitários com csUnit“, “Testes Unitários com componente ...

  • Eudes via Rec6
    Testes Unitários: NUnit & C# | ...zezologs... (para os testers de plantão) Integrando o NUnit com o C# para a realização ...



  • Opine!




    Caso possua um site, preencha este campo que ele sera exibido na pagina inicial na aba "+ leitores".

    Clique nos smileys abaixo para adicionar ao seu texto.

    ≈vangry≈ ≈up≈ ≈twisted≈ ≈shock≈ ≈roll≈ ≈pirate≈ ≈oops≈ ≈neutral≈ ≈mrgreen≈ ≈mad≈ ≈kiss≈ ≈halo≈ ≈eek≈ ≈down≈ ≈cry≈ ≈cool≈ ≈angel≈ ≈XO≈ ≈???≈ ≈$≈ ≈!≈ >>> ;) :P :D ::15 :/ :) :( :!

    Comment moderation is enabled. Your comment may take some time to appear.