Pergunta

O que é a melhor prática para testar uma API que depende de dados do banco de dados? Quais são as questões que eu preciso tomar cuidado para em um ambiente "Integração Contínua" que executa testes de unidade como parte do processo de criação? Quero dizer que você implantar o seu banco de dados como parte dos scripts de construção (pode ser executado o seu instalador) ou devo ir para dados hardcoded [uso MSTest Data Driven testes de unidade com XML]?

Eu compreendo que eu pode zombar a camada de dados para a camada de lógica de negócios, mas o que se eu tivesse problemas em minhas instruções SQL em DAL? Mas eu preciso para bater o banco de dados, certo?

Bem ... isso é uma torrente de perguntas:) ... Pensamentos?

Nenhuma solução correta

Outras dicas

Tanto quanto possível, você deve zombar de código para evitar bater o banco de dados completamente, mas parece-me que você está certo sobre a necessidade de testar o seu em algum lugar SQL ao longo da linha. Se você fazer testes de escrita que atingiu o banco de dados, uma dica fundamental para evitar dores de cabeça é para se certificar de que a sua configuração recebe os dados em um estado conhecido, em vez de depender de já estarem disponíveis dados apropriados.

E, claro, nunca testar contra seu banco de dados ao vivo! Mas isso vai sem dizer:)

Como mencionado, o uso zombando para simular chamadas DB em testes de unidade a menos que você quer mexer com seus testes e dados indefinidamente. Testando instruções SQL implica mais de um integração teste . Executar que separada a partir de testes de unidade, eles são 2 animais diferentes.

É uma boa idéia para limpar automaticamente o banco de dados de teste e, em seguida, preenchê-lo com dados de equipamento de teste que serão assumidas para estar lá para todos os testes que precisam se conectar ao banco de dados. As necessidades de banco de dados a ser reposto antes de cada teste para isolamento adequado -. Um teste falhando que põe em dados errados pode causar falsas falhas em testes que se seguem e ele fica confuso se você tem que executar testes em uma determinada ordem para resultados consistentes

Você pode limpar e preencher o banco de dados com ferramentas ( DBUnit , DBUnit.NET , outros) ou apenas fazer suas próprias classes de utilitários para fazer a mesma coisa.

Como você disse, outras camadas devem ser suficientemente dissociada das classes que realmente atingiu o banco de dados, por isso a necessidade de qualquer tipo de banco de dados que está sendo envolvido em testes é limitado a testes de executar um pequeno subconjunto de sua base de código. Seus componentes banco de dados acesso pode ser escarnecido / apagou por tudo o que depende deles.

Uma coisa que eu fiz foi criar métodos estáticos que retornaram dados de teste de um estado conhecido. Eu, então, usar um DAL "fake" para retornar esses dados como se eu estivesse realmente chamando o banco de dados. Como para testar o procedimento sql / armazenadas, eu testei usando SQL Management Studio. YMMV!

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