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