Pergunta

Eu estou procurando opções satisfatórias para unidade testar minhas aulas DAL .NET; Como eles são as classes DAL, eles acessar o banco de dados diretamente usando ADO.NET. Atualmente eu uso uma instância de um banco de dados MSSQL para o teste, mas queria saber o mais rápido opções existem --- desde testes de unidade precisa correr o mais rápido possível, uma solução in-memory seria o ideal.

Eu também deveria mencionar que eu me amarrado a TSQL já que estou sempre apenas vai estar usando uma plataforma Microsoft.

Foi útil?

Solução

Uma vez que você estado:

Gostaria também de mencionar que eu tenho amarrado -me a Tsql desde que eu sou sempre apenas vai estar usando um Microsoft plataforma.

Em seguida, usando SQLServer Compact Edition pode funcionar bem para as suas necessidades. Não vai funcionar totalmente na memória, mas pode operar em um modo de somente leitura (onde há edições ocorrer para o arquivo de banco de dados principal para que ele possa ser utilizado por vários testes de uma vez)

Existem algumas armadilhas, procedimentos não armazenados são suportados, alguns tipos de dados precisam ser traduzidos e certos tipos de dados têm limites apertados (nomeadamente varchar que só pode ir para 4000 caracteres) Linq para Sql também não está devidamente apoiado.

No entanto, eu usei um SqlServer Compact Edition como um substituto quase inteiramente cair para o banco de dados apropriado SQL Server com bons resultados.

Outras dicas

Eu encontrei SQLite para ser a melhor opção. Embora, eu estou usando nHibernate, mas é de zero de configuração para que ele só leva um segundo para configurar. Porém, você tem que estar ciente de que estes tipos de motores normalmente não têm algumas coisas que você pode precisar (por exemplo, SQLite explode quando você tem espaços em nomes de tabela se você estiver usando um provedor ADO)

Com certeza, @TopBanana está certo sobre alguns dos problemas com não usar um banco de dados "real". No entanto, um in-memory RDBMS é perfeito para esses tipos de testes que deseja executar muito rapidamente (por exemplo, check-in testes para incremental ou CI constrói).

A outra grande vantagem é que você não precisa se preocupar com a configuração ou derrubar. É incrivelmente improdutivo para ter o seu check-in falhar porque desenvolvedor A quebrou seu banco de dados dev; -)

Eu recomendaria usar o mesmo banco de dados para os testes de unidade como para a produção. Você realmente não precisa de alguma diferença estranho atirando-lhe no pé quando você está depurando um problema ao vivo.

Se você tem um olhar para o conjunto de teste de unidade muito grande para NHibernate, você verá que ele usa SQL Server (disco com base), e os testes executados com uma rapidez surpreendente. É ainda mais impressionante considerar que há muito mais a tabela criação / exclusão acontecendo do que o conjunto média de testes de unidade, que não é o SQL Server é otimizado para.

Eu ouvi que há software para montar ramdisk no Windows (não lembro url, sorry).

Poderia ser interessante para criar bancos de dados de teste sobre isso.

é SQL Server realmente o gargalo para os testes de unidade?

eu quero dizer:

  1. Você perfilado seus testes de unidade (com algo como SQL Profiler). todos eles são lentos? São alguns lento? Por quê?
  2. São os seus testes de unidade fazendo demais? É a instalação e desmontagem de código muito pesado?
  3. Se o SQL é o seu gargalo, Você considerou um zombeteiro quadro , para que zombar de todas as suas chamadas SQL.

Eu tive desafios semelhantes com Oracle e fizemos o seguinte:

  • a certeza que nós tivemos que os testes unitários reais não tocam o db, mas simulações utilizada para serviços em vez

  • testes Tagged DB que realmente necessários a Oracle contra os testes que poderia correr contra HSQLDB ou H2 ou qualquer outro banco de dados em memória. Assim, podemos executá-los separadamente.

  • Com os testes que realmente utilizados recursos do Oracle usamos uma instância normal de Oracle que correu em um disco RAM.

Isso fez com que os testes considerável mais rápido.

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