我正在尝试为我们的集成测试定义一种使用测试数据库(在 SQL Server 中)的方式。
我的想法是在集成测试程序集启动时执行这些步骤:
- 创建一个完全空的数据库
- 运行“创建数据库对象”脚本来创建所有相关的数据库对象(表、视图、序列等)
- 填写“基础数据”(查找值等)
(db)_Basis
为未来的集成测试拍摄称为“基线”的数据库快照
现在,在每个测试类(包含 1-n 个测试)之前,我计划简单地执行“从快照还原”以返回到数据库的定义明确、或多或少“空”的状态。到目前为止,它就像一个魅力。
但是,有一组集成测试需要在大型测试数据库上运行 - 所以我希望在每个测试夹具(具有 n 个单独测试的类)之前执行此操作
- 从
(db)_Basis
快照恢复数据库 - 将这 50'000+ 行数据插入数据库
- 创建另一个快照
(db)_With_Testdata
快照
然后对于每个测试,将数据库重置为定义良好的(db)_With_Testdata
快照版本,运行测试,验证结果等等。
问题是:我似乎不能同时拥有两个数据库快照 - 一旦我这样做,我就无法将我的数据库恢复到其中任何一个......我不断收到此错误:
消息 3137,级别 16,状态 4,第 9 行
数据库无法还原。主名称或快照名称指定不正确,未删除所有其他快照,或者缺少文件。消息 3013,级别 16,状态 1,第 9 行
RESTORE DATABASE 异常终止。
这真的是 SQL Server 数据库快照的工作原理吗?似乎非常限制.....如果我不能直接回到原始的“(db)_Basis”快照,我会理解 - 但仅仅因为我现在有两个快照,我什至不能回到最近的一个?!?!?