Thursday, March 30, 2017
   

Latest Posts

Posted on 7/28/2016 by André Pires in Reflexões
Posted on 1/10/2014 by André Pires in .Net
Posted on 1/7/2014 by André Pires

Posts

Devemos "mockear" um repositório genérico?

Posted on 11/22/2012 by André Pires in TDD
image

Alguém me perguntou como mockear um repositório genérico usando um framework de mocks, tal como o Rhino. A resposta veio com uma pergunta: Pra que usar um framework de mock?

É verdade que utlizar um framework de mock como um RhinoMocks é uma excelente idéia.

Entretanto, é necessário usar uma ferramenta dessas em todo e qualquer caso?

Eu diria que não...

Na minha opinião (e trata-se de MINHA opinião mesmo), é muito mais fácil criar um "fake" manualmente para alguns casos, do que utilizar um framework... Vamos ver um exemplo?

Considere a seguinte interface:

1.public interface IRepositorio<T> where T : IEntidade
2.{
3.  T ObterPorId(Guid id);
4.  void Salvar (T entidade);
5.  void Excluir (T entidade);
6.  IQueryable<T> Obter(Expression<Func<T, bool>> predicado);
7.}

Como você pode ver, trata-se de uma interface de um típico repositório genérico. NÃO INTERESSA para este exemplo se você faz repositórios diferentes desses, nem se você usa inteiros no lugar de Guids, isso NÂO IMPORTA! Ok?

O que importa aqui é que é muito fácil criar um "Fake" dessa ou de qualquer outra variação da interface.

01.public class RepositorioFake<T> : IRepositorio<T> where T : IEntidade
02.{
03.    private Dictionary<Guid, T> dados = new Dictionary<Guid, T>();
04.    public T ObterPorId(Guid id)
05.    {
06.        var entidade = default(T);
07.        dados.TryGetValue(id, out entidade);
08.        return entidade;
09.    }
10.    public void Salvar(T entidade)
11.    {
12.        dados[entidade.Id] = entidade;
13.    }
14.    public void Excluir(T entidade)
15.    {
16.        dados.Remove(entidade.Id);
17.    }
18.    public IQueryable<T> Obter(Expression<Func<T, bool>> predicado)
19.    {
20.        return dados.Values.Where(predicado).AsQueryable();
21.    }
22.}

Pronto! Eis um Fake que você pode usar em todos os seus testes, sem ter que ficar fazendo setup de mocks, etc! :)

OO não é brinquedo gente! Vamos usar! Me respondam: Qual princípio OO pode ser utilizado para utilizar esse fake em seus testes? :)

Por enquanto é só. Bons estudos!

Home   |   Forum
André Pires 2011