Pergunta

Eu uso um gerador de código (CodeSmith com modelo .NetTiers) para gerar todo o código DAL. I escrever testes de unidade para o meu código (camada de negócios), e estes testes estão se tornando muito lento para ser executado. O problema é que, para cada teste, eu redefinir o banco de dados para ter um estado limpo. Além disso, como eu faço um monte de testes, parece que a latência das operações de banco de dados resumir a um atraso pouco bonita.

Todas as operações de banco de dados são realizados através de uma classe DataRepository que é gerado pelo .NetTiers. Você sabe se existe uma maneira de gerar (ou código eu) um mock-DataRepository que usar o armazenamento em memória em vez de usar o banco de dados?

Desta forma, eu seria capaz de usar este repositório simulada em meus testes de unidade, acelerando-los muito, sem realmente mudar alguma coisa para o meu código atual!

Foi útil?

Solução

Dê uma olhada na injeção de dependência (DI) e inversão de recipientes de controle (COI). Essencialmente, você irá criar uma interface que que um novo objeto DB simulada pode implementar, e então o quadro DI vai injetar seu DB simulada quando a execução de testes, eo DB real quando em execução, você aplicativo.

Existem inúmeras bibliotecas de código livre e aberto que você pode usar para ajudá-lo. Como você está em C #, um dos novos e para cima e próximos bibliotecas DI é Ninject . Há muitos outros também. Confira este Wikipedia artigo para os outros e uma descrição de alto nível.

Outras dicas

A partir da descrição do problema, eu acho que você está realizando o teste de integração, porque o teste está fazendo uso do negócio eo banco de dados DAL e ao vivo.

Para os testes de unidade, você lidar com uma camada de código com todas as outras dependências quer ridicularizados ou stubbed. Com essa abordagem, você testes de unidade será muito rápido para executar em cada alterações de código incrementais.

Existem vários quadros zombaria que você pode usar como Rhino Mock, MOQ, typemock para citar alguns. (No meu projeto, eu uso Rhino simulada para zombar a camada DAL e teste de unidade camada de negócios em isolamento)

Harsha

Alguns de nossos testes de unidade usar dados obtido a partir de XML que foram gerados a partir de um banco de dados para acesso db simulada. aulas DAL são substituídos por outros falsos, porque eles são armazenados em um recipiente DI.

A geração do xml do código personalizado é, se você encontrar uma solução de código aberto para isso, então eu estou feliz em ouvi-lo.

Editar após a resposta de Stefan: Lembro-me de uma outra equipe usando SQL CE para seu banco de dados de teste

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top