J'essaie de définir une façon de travailler avec une base de données de test (dans SQL Server) pour nos tests d'intégration.
Mon idée était de faire ces étapes lors du lancement de l'assemblage de test d'intégration:
- créer une base de données totalement vide
- exécuter le script "créer des objets de base de données" pour créer tous les objets de base de données pertinents (table, vues, séquences, etc.)
- remplir les "données de base" (valeurs de recherche, etc.)
- prendre un instantané de la base de données appelé
(db)_Basis
"ligne de base" pour les futurs tests d'intégration
Maintenant, avant chaque classe de test (contenant des tests 1-n), je prévoyais simplement de faire une "restauration à partir d'un instantané" pour revenir à l'état bien défini, plus ou moins "vide" de la base de données. Fonctionne comme un charme jusqu'à présent.
Cependant, il existe un ensemble de tests d'intégration qui doivent fonctionner sur une grande base de données de tests - j'espérais donc le faire avant chacun de ces tests (classes avec n tests individuels)
- restaurer la base de données à partir de l'
(db)_Basis
instantané - insérer ces 50'000 + lignes de données dans la base de données
- créer un autre instantané
(db)_With_Testdata
instantané
puis pour chaque test, réinitialisez la base de données à la (db)_With_Testdata
version d'instantané bien définie , exécutez les tests, vérifiez le résultat, etc.
Le problème est: je n'arrive pas à avoir deux instantanés de base de données en même temps - une fois que je le fais, je ne peux pas restaurer ma base de données sur l'un d'eux .... Je reçois toujours cette erreur:
Msg 3137, niveau 16, état 4, ligne 9, la
base de données ne peut pas être rétablie. Le nom principal ou le nom de l'instantané n'est pas spécifié correctement, tous les autres instantanés n'ont pas été supprimés ou il manque des fichiers.Msg 3013, niveau 16, état 1, ligne 9
RESTORE DATABASE se termine anormalement.
Est-ce vraiment ainsi que fonctionnent les instantanés de base de données SQL Server? Semble terriblement restrictif ... Je comprendrais si je ne pouvais pas revenir directement à l'instantané "(db) _Basis" d'origine - mais juste parce que j'ai maintenant deux instantanés, je ne peux même pas revenir au plus récent ?!?!?