Estou tentando definir uma maneira de trabalhar com um banco de dados de teste (no SQL Server) para nossos testes de integração.
Minha ideia era executar estas etapas no lançamento do assembly de teste de integração:
- crie um banco de dados totalmente vazio
- execute o script "criar objetos de banco de dados" para criar todos os objetos de banco de dados relevantes (tabela, visualizações, sequências etc.)
- preencha os "dados da base" (valores de pesquisa etc.)
- tire um instantâneo do banco de dados chamado
(db)_Basiscomo "linha de base" para futuros testes de integração
Agora, antes de cada classe de teste (contendo testes 1-n), eu estava planejando simplesmente fazer uma "restauração do instantâneo" para voltar ao estado bem definido, mais ou menos "vazio" do banco de dados. Até agora, funciona como um encanto.
No entanto, há um conjunto de testes de integração que precisam operar em um grande banco de dados de testes - então eu esperava fazer isso antes de cada um desses equipamentos de teste (classes com n testes individuais)
- restaurar banco de dados a partir da
(db)_Basiscaptura instantânea - insira essas 50.000 linhas de dados no banco de dados
- criar outro instantâneo
(db)_With_Testdatainstantâneo
e, em seguida, para cada teste, redefina o banco de dados para a (db)_With_Testdataversão de instantâneo bem definida , execute os testes, verifique o resultado e assim por diante.
O problema é: parece que não consigo ter dois instantâneos de banco de dados ao mesmo tempo - depois disso, não consigo restaurar meu banco de dados para nenhum deles ... Continuo recebendo este erro:
Msg 3137, nível 16, estado 4, linha 9 O
banco de dados não pode ser revertido. O nome principal ou o instantâneo está especificado incorretamente, todos os outros instantâneos não foram eliminados ou faltam arquivos.A mensagem 3013, nível 16, estado 1, linha 9
RESTORE DATABASE está sendo finalizada de maneira anormal.
É assim mesmo que os instantâneos de banco de dados do SQL Server funcionam? Parece muito restritivo ... eu entenderia se não pudesse voltar diretamente para o instantâneo original "(db) _Basis", talvez - mas só porque agora tenho dois instantâneos, não posso voltar ao mais recente ?!?!?