統合テストのために(SQL Serverの)テストデータベースを操作する方法を定義しようとしています。
私のアイデアは、統合テストアセンブリの起動時に次の手順を実行することでした。
- 完全に空のデータベースを作成する
- 「データベースオブジェクトの作成」スクリプトを実行して、関連するすべてのデータベースオブジェクト(テーブル、ビュー、シーケンスなど)を作成します。
- 「ベースデータ」を入力します(ルックアップ値など)
(db)_Basis
将来の統合テストのために「ベースライン」と呼ばれるデータベースのスナップショットを撮る
すべてのテストクラス(1-nテストを含む)の前に、「スナップショットからの復元」を実行して、データベースの定義済みの多かれ少なかれ「空の」状態に戻すことを計画していました。これまでのところ魅力のように動作します。
ただし、大規模なテストデータベースで動作する必要がある統合テストのセットがあります。そのため、これらの各テストフィクスチャ(n個の個別テストを持つクラス)の前にこれを実行したいと考えていました。
(db)_Basis
スナップショットからデータベースを復元する- これらの50'000 +行のデータをデータベースに挿入します
- 別のスナップ
(db)_With_Testdata
ショットスナップショットを作成する
その後、テストごとに、データベースを適切に定義された(db)_With_Testdata
スナップショットバージョンにリセットし、テストを実行して、結果を検証します。
問題は、2つの dbスナップショットを同時に持つことができないように思われることです。一度行うと、データベースをどちらにも復元できません。このエラーが引き続き発生します。
メッセージ3137、レベル16、状態4、行9
データベースを元に戻すことはできません。プライマリ名またはスナップショット名が不適切に指定されているか、他のすべてのスナップショットが削除されていないか、ファイルが欠落しています。メッセージ3013、レベル16、状態1、行9
RESTORE DATABASEが異常終了しています。
SQL Serverデータベースのスナップショットは実際にどのように機能しますか?? ひどく制限しているようです.....おそらく元の「(db)_Basis」スナップショットに直接戻れないかどうかはわかりますが、2つのスナップショットを持っているという理由だけで、最新のスナップショットに戻ることさえできません。 ?!?!?