Mock object, qdo usar?

1 resposta
A
Pessoal estou estudando tdd e me surgiu uma dúvida. Sempre que estou fazendo testes que dependem de uma interface preciso usar o mock?? Exemplo: tenho duas classes a teste, e uma chamada palavra que estará ligada a interface
[TestInitialize()]  
        public void Init()  
        {  
            lista = new Palavra();  
        }

        [ExpectedException(typeof(InvalidOperationException))]
        [TestMethod]
        public void lista_de_palavras_esta_vazia()
        {
            lista.Vazia();

            
        }
        

        [TestMethod]
        public void add_palavras_na_lista_e_buscar_topo_da_pilha()
        {
            //adicionando palavras na lista  
            String p = "casa";
            lista.Salvar(p);
            p = "parede";
            lista.Salvar(p);
            p = "computador";
            lista.Salvar(p);
            p = "blusa";
            lista.Salvar(p);
            Assert.IsFalse(lista.IsEmpty, "Após inclusão, IsEmpty, deve ser false");

            //buscando topo da pilha  

            String recuperar = lista.Top() as String;
            Assert.AreEqual(p, recuperar);

        }

class palavra

public class Palavra
    {
        private ArrayList _palavras = new ArrayList();
        public Boolean IsEmpty
        {
            get { return this._palavras.Count == 0; }
        }

        public int getCount()
        {
            return this._palavras.Count;
        }

        public void Vazia()
        {
            if (this.IsEmpty == true)
                throw new InvalidOperationException("Lista de Palavras Secretas Está Vazia");
            
        }
        
        public void Salvar(Object palavra_)
        {
            this._palavras.Insert(0, palavra_);
        }

        public Object Top()
        {
            return this._palavras[0];
            
        }

        public String pegarPalavra()
        {
            if (this._palavras.Count == 0) return "";
            Random Aleat = new Random();
            int NumAleat = Aleat.Next(this._palavras.Count);
            return (String)this._palavras[NumAleat];
        }

é através da interface que add palavras na lista. Então, para q a lista deixe de estar vazia eu preciso da interface.
Qdo executo os teste sem a referencia a interface, ocorre a exceção "lista vazia"
porém, qdo faço referencia a interface, os testes não rodam.

o motivo é a ausência do uso do mock???

1 Resposta

rmendes08

Cara, coloque o código completo do seu teste para entendermos melhor o que está acontecendo. Por exemplo, não dá pra ver qual o tipo da variável lista…

Mas sobre mock objects é o seguinte, eles servem para substituir dependências da classe que está sendo testada, e não para substituir a classe de teste. Por exemplo,
você vai criar uma classe que serve para reservas quartos de hotel, algo com ReservasServiceProvider. Essa classe depende de um DAO, por exemplo, HospedesDao. Se você quer criar um teste unitário para a classe ReservasServiceProvider mas não tem o Dao implementado ou não quer acessar um banco de dados real para fazer esse teste você fornece um mock da interface HospedesDao, mas você testa a implementação real de ReservasServiceProvider.

A propósito, isso não me parece Java, estou certo ?

Criado 15 de março de 2011
Ultima resposta 15 de mar. de 2011
Respostas 1
Participantes 2