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

Шрифт
Фон

trando nosso ponto contrário. Em nossa opinião, não é possível criar

uma simples sequência de passos para se chegar ao melhor algoritmo

possível. Novamente, a experiência e conhecimento do desenvolvedor

são necessários.

Por fim, o ponto é que é realmente difícil saber o tamanho do passo a ser

dado, e como refatorar o código para que ele fique cada vez melhor. Sua

experiência deve ser levada em conta nessa hora.

Vantagem de fazer o teste passar rápido

Uma das vantagens de fazer o teste passar de maneira simples e rápida é

testar o teste. Seu teste é código; e ele pode ter bugs também.

Como não faz sentido

escrever um teste para o teste, uma maneira de

testá-lo é garantir que ele falhe quando precisa falhar, e passe quando

precisa passar. Ou seja, antes de começar a implementação, veja o teste

falhar. Com ele falhando, tente fazê-lo passar da maneira mais simples

possível, com o objetivo apenas de vê-lo ficando verde. Dessa forma, você

testou o teste.

46

Casa do Código

Capítulo 4. Simplicidade e Baby Steps

4.5

Conclusão

Neste capítulo, discutimos sobre os famosos baby steps. A ideia é possibilitar ao desenvolvedor andar na velocidade que achar necessário. Se o código que ele está

implementando naquele momento é complicado e/ou complexo, tomar passos de

bebê podem ajudá-lo a entender melhor o problema e a buscar por soluções mais

simples.

Mas, se o código que ele está trabalhando é algo que já está bem claro e não há

muitas dúvidas sobre a implementação, o desenvolvedor pode então dar um passo

um pouco maior, já que passos pequenos farão com que ele apenas diminua sua

produtividade.

No fim, a grande vantagem dos passos de bebê é poder aprender algo sobre o

código para que o mesmo possa ser melhorado. Se o desenvolvedor não está apren-

dendo nada, então talvez não haja razão para dar passos de bebê naquele instante.

Discutimos também que a modificação mais simples não é necessariamente a

solução mais simples que resolve o problema. Desenvolvedores devem buscar sim-

plicidade não apenas no nível de código, mas também no nível de design de classes.

Às vezes um simples if pode ser o código mais simples a ser escrito, mas talvez não

seja a melhor solução do ponto de vista do design.

Use baby steps com parcimônia. Um bom praticante de TDD sabe a hora de

aumentar ou diminuir o passo. Use os passos de bebê para o bem do seu projeto,

e não simplesmente porque é uma regra. Parafraseando Jason Gorman, "se fazer a

coisa mais simples significa fazer uso de muitos ifs ou switchs, muito provavelmente

você não entendeu TDD.

47

Capítulo 5

TDD e Design de Classes

Como dito anteriormente, TDD é bastante popular pelos seus efeitos positivos no

design das classes do nosso sistema. Neste capítulo, começaremos a discutir como

os testes podem efetivamente ajudar desenvolvedores a pensar melhor em relação às

classes que estão criando.

5.1

O Problema do Carrinho de Compras

Suponha agora que o projeto atual seja uma loja virtual. Essa loja virtual possui um

carrinho de compras, que guarda uma lista de itens comprados. Um item possui a

descrição de um produto, a quantidade, o valor unitário e o valor total desse item.

Veja o código que representa esse carrinho:

public class CarrinhoDeCompras

{

private IList<Item> Itens { get; private set; }

5.1. O Problema do Carrinho de Compras

Casa do Código

public CarrinhoDeCompras()

{

this.itens = new List<Item>();

}

public void Adiciona(Item item)

{

this.Itens.Add(item);

}

}

Um item também é uma simples classe:

public class Item

{

public string Descricao { get; private set; }

public int Quantidade { get; private set; }

public double ValorUnitario { get; private set; }

public Item(String descricao,

int quantidade,

double valorUnitario)

{

this.Descricao = descricao;

this.Quantidade = quantidade;

this.ValorUnitario = valorUnitario;

}

public double ValorTotal

{

get {

return this.ValorUnitario * this.Quantidade;

}

}

}

Agora imagine que o programador deva implementar uma funcionalidade que

devolva o valor do item de maior valor dentro desse carrinho de compras. Pensando

já nos testes, temos os seguintes cenários:

50

Casa do Código

Capítulo 5. TDD e Design de Classes

Se o carrinho só tiver um item, ele mesmo será o item de maior valor.

Se o carrinho tiver muitos itens, o item de maior valor é o que deve ser retor-

nado.

Um carrinho sem nenhum item deve retornar zero.

Seguindo TDD a risca, vamos começar pelo cenário

mais simples, que nesse caso

é o carrinho vazio. Vamos criar um teste para a classe MaiorPreco, responsável por

essa tarefa:

[TestFixture]

public class MaiorPrecoTest

{

[Test]

public void DeveRetornarZeroSeCarrinhoVazio()

{

CarrinhoDeCompras carrinho = new CarrinhoDeCompras();

MaiorPreco algoritmo = new MaiorPreco();

double valor = algoritmo.Encontra(carrinho);

Assert.AreEqual(0.0, valor, 0.0001);

}

}

Fazer esse teste passar é fácil; basta retornar zero.

public class MaiorPreco

{

public double Encontra(CarrinhoDeCompras carrinho)

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

0
Шрифт
Фон

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