Mockando DataReader

Ha pouco tempo, eu e um colega de equipe tínhamos a necessidade de obter informações de um ERP para o software que estávamos desenvolvendo. Para obter essas informações, utilizamos consultas via ADO pelo fato de possuir uma performance maior e, também, era a forma que o time se sentia mais confortável naquele momento para buscar os dados.

Até ai tudo bem, criamos as nossas queries, isolamos na camada de anti corrupção, tudo bem bonito, porém precisávamos ter a certeza de que os dados vindos do ERP seriam tratados, logo, precisaríamos simular esse retorno.Foi ai que surgiu a necessidade de criar um Mock do retorno que, no nosso caso, seria um DataReader.

Obs: Neste exemplo, para simular uma base de dados já existente, utilizei o banco de dados AdventureWorks da microsoft  (O código completo esta no meu GitHub).

Neste exemplo, criei duas camadas, uma que chamo de repositório, que é onde está a minha classe de repositório chamada CustomerADO que contém a query de consulta, uma classe chamada serviço, que á classe que consome meu repositório e uma classe chamada Customer, que é para onde vou fazer o “De  -> Para” dos dados. A outra camada é minha camada de testes.

img-1

Na camada repositório, instalei os seguintes pacotes via nuget:

img-2

Criei uma interface do repositório Customer:

img-3

implementei a mesma:

img-4

e para terminar, a classe servico  que consome meu repositório:

img-5

até ai tudo ok. Agora vamos aos testes.

Na camada de teste, instalei os seguintes pacotes via nuget:

img-6

Obs: o NBehave spec, não é necessário utilizar se você utiliza outro framework de teste.

primeiro passo: criei mock do meu DataReader e do meu repositório para poder simular o retorno:

img-7

segunda passo: Configuro o retorno do DataReader:
img-8

Vamos analisar esse código:

Na linha 33 eu estou dizendo que, quando o método Read for chamado, ele vai retornar o valor da variável pronto, isto é, true. Já na segunda vez que ele for chamado ele irá retornar false, isso porque eu estou definindo no callback que o valor da variável pronto passa a ser falseSe eu não fizer isso, método entraria em loop infinito.

Da linha 34 a 38 eu estou definindo os valores que cada campo do meu DataReader vai retornar.

Com meu mock configurado, vou realizar a chamada do meu servico. Apos a chamada, verifico se o meu retorno foi o esperado, no caso, verifico se minha lista de customer é maior que 0.

img-9

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s