Aniche Mauricio - Test-Driven Development: Teste e Design no Mundo Real com .NET стр 7.

Шрифт
Фон

Console.WriteLine("O menor produto: " +

algoritmo.Menor.Nome);

Console.WriteLine("O maior produto: " +

algoritmo.Maior.Nome);

}

}

Veja que esse código contém, de forma automatizada, boa parte do que foi des-

crito em relação ao teste manual: ele monta um cenário (um carrinho de compras

com 3 produtos), executa uma ação (invoca o método Encontra()), e valida a saída

(imprime o maior e o menor produto).

E o melhor: uma máquina faz (quase) tudo isso. Ao rodar o código acima, a

máquina monta o cenário e executa a ação sem qualquer intervenção humana. Mas

uma ação humana ainda é requerida para descobrir se o comportamento executou

de acordo. Um humano precisa ver a saída e conferir com o resultado esperado.

É preciso que o próprio teste faça a validação e informe o desenvolvedor caso o

resultado não seja o esperado. Para melhorar o código acima, agora só introduzindo

10

Casa do Código

Capítulo 2. Testes de Unidade

um framework de teste automatizado. Esse framework nos daria um relatório mais

detalhado dos testes que foram executados com sucesso e, mais importante, dos tes-

tes que falharam, trazendo o nome do teste e a linha que apresentaram problemas.

Neste livro, faremos uso do NUnit [6], um framework de testes de unidade popular

do mundo .NET.

O NUnit é um programa a parte, que mostra uma lista de todos os testes exe-

cutados, pintando-os de verde em caso de sucesso, ou vermelho em caso de falha.

Ao clicar em um teste vermelho, a ferramenta ainda apresenta a linha que falhou, o

resultado que era esperado e o resultado devolvido pelo método.

NUnit ou Microsoft Test?

O Visual Studio hoje conta com o Microsoft Test, que é o framework de

teste automatizado da Microsoft. Você pode optar por usá-lo, se preferir.

A sintaxe dele é muito similar a do NUnit. E, sem dúvida, tudo que será

discutido aqui pode ser aplicado com ele também.

Aqui, optei por usar NUnit, pois foi o primeiro framework de teste auto-

matizado do mundo .NET, possui código aberto, e pode ser usado inclu-

sive por aqueles que optam pela versão Express do Visual Studio.

Para converter o código acima em um teste que o NUnit entenda, não é neces-

sário muito trabalho. A única parte que ainda não é feita 100% pela máquina é a

terceira parte do teste: a validação. É justamente ali que invocaremos os métodos

do NUnit. Eles que farão a comparação do resultado esperado com o calculado. No

NUnit, o método para isso é o Assert.AreEqual():

using NUnit.Framework;

[TestFixture]

public class TestaMaiorEMenor

{

[Test]

public void OrdemDecrescente()

{

CarrinhoDeCompras carrinho = new CarrinhoDeCompras();

carrinho.Adiciona(new Produto("Geladeira", 450.0));

11

2.3. O Primeiro Teste de Unidade

Casa do Código

carrinho.Adiciona(new Produto("Liquidificador", 250.0));

carrinho.Adiciona(new Produto("Jogo de pratos", 70.0));

MaiorEMenor algoritmo = new MaiorEMenor();

algoritmo.Encontra(carrinho);

Assert.AreEqual("Jogo de pratos",

algoritmo.Menor.Nome);

Assert.AreEqual("Geladeira",

algoritmo.Maior.Nome);

}

}

Pronto. Esse código acima é executado pelo NUnit. Veja que fizemos uso tam-

bém de dois atributos, o [TestFixture], pois precisamos indicar que aquela é uma

classe que contém métodos de teste, e o [Test] em cima do método. Sempre preci-

samos fazer isso.

Esse teste, como bem sabemos, falhará:

Para fazer o teste passar, é necessário corrigir o bug na classe de produção. O

que faz o código falhar é justamente a presença do else (ele fazia com que o código

nunca passasse pelo segundo if, que verificava justamente o maior elemento). Ao

12

Casa do Código

Capítulo 2. Testes de Unidade

removê-lo, o teste passa:

public class MaiorEMenor

{

public Produto Menor { get; private set; }

public Produto Maior { get; private set; }

public void Encontra(CarrinhoDeCompras carrinho)

{

foreach(var produto in carrinho.Produtos)

{

if(Menor == null || produto.Valor < Menor.Valor)

{

Menor = produto;

}

if (Maior == null || produto.Valor > Maior.Valor)

{

Maior = produto;

}

}

}

}

13

2.3. O Primeiro Teste de Unidade

Casa do Código

Repare também no tempo que a máquina levou para executar o teste: 0.007 se-

gundos. Mais rápido do que qualquer ser humano faria. Isso possibilita ao desen-

volvedor executar esse teste diversas vezes ao longo do seu dia de trabalho.

E o melhor: se algum dia um outro desenvolvedor alterar esse código, ele poderá

executar a bateria de testes automatizados existente e descobrir se a sua alteração fez alguma funcionalidade que já funcionava anteriormente parar de funcionar. Isso é

conhecido como testes de regressão. Eles garantem que o sistema não regrediu.

14

Casa do Código

Capítulo 2. Testes de Unidade

Meu primeiro teste automatizado

Há muitos anos atrás, trabalhava em uma pequena consultoria de de-

senvolvimento de software em São Paulo. E, como em toda consultoria,

precisávamos anotar nossas horas de trabalho em cada um dos projetos

da empresa, a fim de cobrar corretamente cada um dos clientes.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке