terça-feira, 20 de
maio de
2008.
| Post Atualizado. |
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 :
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:
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();
}
}
}
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.
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);
}
}
}
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:
Agora pressione “Run” e verá que teste irá passar.
Teste também se o teste falha, no código do teste, altere a linha:
if (Codigo001.p_resultado == 25)
para
if (Codigo001.p_resultado == 15)
o teste irá falhar, pois o cálculo, junto com os parâmetros infornados devem retornar 25, observe:
Codigo001.p_real = 5; Codigo001.p_cotacao = 5; Codigo001.p_resultado = Codigo001.p_real * Codigo001.p_cotacao;
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.
4 Opinioes
[...] A última PoC que realizei e publiquei aqui no blog foi no uso do NUnit. [...]
[...] Devido a esta razão nao vou mostrar o código do teste novamente, pois vocês pode vê-lo aqui. [...]
[...] Proseguindo…usarei o mesmo código que venho utilizando nos exemplos passados em “Testes Unitários com csUnit“, “Testes Unitários com componente ...
Testes Unitários: NUnit & C# | ...zezologs... (para os testers de plantão) Integrando o NUnit com o C# para a realização ...
Opine!
(Comente)
(Vote!)





