Professional Documents
Culture Documents
O que é?
O que não é?
E o que isto tem a ver com você?
}
Teste 6 (Green): Fazer o teste passar
com a mais simples implementação
// Stack.cs
using System;
using System.Collections;
public class Stack
Executar a solução;
{ Solução compilada com sucesso;
private ArrayList _elements = new ArrayList ();
Após às alterações, todos os testes
public Boolean IsEmpty
{ continuam passando com sucesso.
get { return this._elements.Count == 0; }
}
public void Push(Object element_)
{
this._elements.Insert(0, element_);
}
public Object Pop()
{
if(this.IsEmpty)
throw new InvalidOperationException(“A pilha está vazia.”);
Object top = this._elements[0];
this._elements.RemoveAt(0);
return top;
}
}
Teste 6 (Refactor!): Melhorar a
implementação
Ao realizar este teste vieram à tona mais
alguns testes que deveriam ser incluídos em
nossa TestList:
10. Inserir nulo em uma pilha e verificar que ela não
está vazia.
11. Inserir nulo em uma Pilha, retirá-lo e verificar
que o valor retornado é nulo.
12. Inserir nulo em uma Pilha, chamar Top e verificar
que o valor retornado é nulo.
Teste 7
O sétimo teste escolhido foi incluir um único objeto,
chamar Top e verificar se a lista não está vazia:
// StackTests .cs
[Test]
public void PushTop()
{ Executar a solução;
Erros de compilação (o método Top()
stack.Push(“42”); não existe);
stack.Top();
Assert.IsFalse(stack.IsEmpty);
}
Teste 7 (Green): Implementar o menor
código que faça o teste compilar
// Stack.cs
using System;
using System.Collections;
public class Stack Executar a solução;
{
private ArrayList _elements = new ArrayList(); Solução compilada com sucesso;
public Boolean IsEmpty
{
Após às alterações, todos os testes
get { return this._elements.Count == 0; } continuam passando com sucesso.
}
public void Push(Object element_)
{
this._elements.Insert(0, element_);
}
public Object Pop()
{
if(this. IsEmpty)
throw new InvalidOperationException(“A pilha está vazia.”);
Object top = this._elements[0];
this._elements.RemoveAt(0);
return top;
}
public Object Top()
{
return null;
}
}
Teste 7 (Refactor!): Melhorar a
implementação
Neste ponto não há nenhuma replicação de
código que possa ser retirada do código;
Então seguimos em frente;
Teste 8 (Red)
O oitavo teste escolhido foi inserir um elemento na Pilha (guardando o
seu valor), chamar Top e verificar que os elementos são iguais:
// StackTests .cs
[Test]
public void PushTopContentCheckElement()
{
Executar a solução;
String pushed = “42”; Solução compilada com sucesso;
stack.Push(pushed); Teste PushTopContentCheckElement
String topped = stack.Top() as String; falha (Red);
Assert.AreEqual(pushed, topped);
}
Teste 8 (Green): Fazer o teste passar
com a mais simples implementação
using System;
using System.Collections;
public class Stack
{ Executar a solução;
private ArrayList _elements = new ArrayList();
public Boolean IsEmpty
Solução compilada com sucesso;
{ Após às alterações, todos os testes
get { return this._elements.Count == 0; }
} continuam passando com sucesso.
public void Push(Object element_)
{
this._elements.Insert(0, element_);
}
public Object Pop()
{
if(this.IsEmpty)
throw new InvalidOperationException(“A pilha está vazia.”);
Object top = this._elements[0];
this._elements.RemoveAt(0);
return top;
}
public Object Top()
{
return this._elements[0];
}
}
Teste 8 (Refactor!): Melhorar a
implementação
Neste ponto não há nenhuma replicação de
código que possa ser retirada do código;
Então seguimos em frente;
Teste 9 (Green)
O nono teste escolhido foi inserir múltiplos elementos na Pilha (guardando o valor
do último inserido), chamar Top e verificar que os elementos são iguais:
// StackTests .cs
[Test]
public void PushMultipleTopContentCheckElement()
{
String pushed1 = “1”;
stack.Push(pushed1);
Executar a solução;
String pushed2 = “2”; Solução compilada com sucesso;
stack.Push(pushed2); Após às alterações, todos os testes continuam
passando com sucesso.
String pushed3 = “3”;
stack.Push(pushed3);
String topped = stack.Top() as String;
Assert.AreEqual(pushed3, topped);
}
Teste 9 (Refactor!): Melhorar a
implementação
Neste ponto não há nenhuma replicação de
código que possa ser retirada do código;
Então seguimos em frente;
Teste 10 (Green)
O décimo teste chamar Top diversas vezes e verificar que os elementos são iguais:
// StackTests .cs
[Test]
public void MultipleTopContentCheckElement()
{
String pushed = “1”;
stack.Push(pushed);
String topped1 = stack.Top() as String; Executar a solução;
Assert.AreEqual(pushed , topped1); Solução compilada com sucesso;
Após às alterações, todos os testes continuam
String topped2 = stack.Top() as String; passando com sucesso.
Assert.AreEqual(topped1, topped2);
String topped3 = stack.Top() as String;
Assert.AreEqual(topped2, topped3);
}
Teste 10 (Refactor!): Melhorar a
implementação
Neste ponto não há nenhuma replicação de
código que possa ser retirada do código;
Então seguimos em frente;
Teste 11 (Red)
O décimo primeiro teste é chamar Top em uma pilha vazia
// StackTests .cs
[ExpectedException(typeof(InvalidOperationException))]
[Test]
public void TopEmpty()
{ Executar a solução;
Solução compilada com sucesso;
stack.Top(); Teste TopEmpty falha (Red);
}
Teste 11 (Green): Fazer o teste passar
com a mais simples implementação
// Stack.cs
using System;
using System.Collections; Executar a solução;
public class Stack
{
Solução compilada com sucesso;
… Após às alterações, todos os testes
public Object Pop() continuam passando com sucesso.
{
if(this.IsEmpty)
throw new InvalidOperationException(“A pilha está vazia.”);
Object top = this._elements[0];
this._elements.RemoveAt(0);
return top;
}
public Object Top()
{
if(this.IsEmpty)
throw new InvalidOperationException(“A pilha está vazia.”);
return this._elements[0];
}
}
Teste 11 (Refactor!): Melhorar a
implementação
…
public Object Pop() Executar a solução;
{ Solução compilada com sucesso;
Object top = Top(); Após às alterações, todos os testes
this._elements.RemoveAt(0); continuam passando com sucesso.
return top;
}
public Object Top()
{
if(this.IsEmpty)
throw new InvalidOperationException(“A pilha está vazia.”);
return this._elements[0];
}
…
Teste 12 (Green)
O décimo segundo teste é inserir nulo e verificar que a pilha não está
vazia.
// StackTests .cs
[Test]
public void PushNull ()
{ Executar a solução;
Solução compilada com sucesso;
stack.Push(null); Após às alterações, todos os testes
Assert.IsFalse(stack.IsEmpty); continuam passando com sucesso.
}
Teste 12 (Refactor!): Melhorar a
implementação
Neste ponto não há nenhuma replicação de
código que possa ser retirada do código;
Então seguimos em frente;
Teste 13 (Green)
O décimo terceiro teste é inserir um objeto nulo chamar Pop e
verificar que o valor retornado é nulo e que a pilha está vazia.
// StackTests .cs
[Test]
public void PushNullCheckPop()
{ Executar a solução;
Solução compilada com sucesso;
stack.Push(null); Após às alterações, todos os testes
Assert.IsNull(stack.Pop()); continuam passando com sucesso.
Assert.IsTrue(stack.IsEmpty);
}
Teste 13 (Refactor!): Melhorar a
implementação
Neste ponto não há nenhuma replicação de
código que possa ser retirada do código;
Então seguimos em frente;
Teste 14 (Green)
O décimo quarto teste é inserir um objeto nulo chamar Top e verificar
que o valor retornado é nulo.
// StackTests .cs
[Test]
public void PushNullCheckTop()
{ Executar a solução;
Solução compilada com sucesso;
stack.Push(null); Após às alterações, todos os testes
Assert.IsNull(stack.Top()); continuam passando com sucesso.
}
Teste 14 (Refactor!): Melhorar a
implementação
Neste ponto não há nenhuma replicação de
código que possa ser retirada do código;
Então seguimos em frente;
Stack.cs
using System;
using System.Collections;
public class Stack
{
private ArrayList _elements = new ArrayList();
public Boolean IsEmpty
{
get { return this._elements.Count == 0; }
}
public void Push(Object element_)
{
this._elements.Insert(0, element_);
}
public Object Pop()
{
Object top = Top();
this._elements.RemoveAt(0);
return top;
}
public Object Top()
{
if(this.IsEmpty)
throw new InvalidOperationException(“A pilha está vazia.”);
return this._elements[0];
}
}