在C#中的SQL Server中的多用户环境中处理数据库快照

时间:2016-04-30 07:04:27

标签: sql-server automated-tests snapshot data-consistency

我在C#中编写了一些使用数据库,更新和修改值的测试。为了确保在每次测试后数据库恢复到其先前状态,我执行以下操作:

我为测试套件开头使用的所有数据库创建快照。在每次测试之后,我将数据库恢复到其快照,以确保对于即将运行的新测试用例没有对数据库进行任何更改。在测试套件的最后,我删除了创建的快照。

以下是测试类的初始化和清理方法

    [ClassInitialize()]
    public static void ClassInit(TestContext context)
    {
        CreateDatabaseSnapshots();
    }

    [ClassCleanup()]
    public static void ClassCleanup()
    {
        DeleteDatabaseSnapshots();
    }

这是在测试套件中的每个测试之后执行的方法。

    [TestCleanup()]
    public void TestCleanup()
    {
      tRevertDatabase();
    }

我的问题:在多用户环境中,我该如何处理创建数据库快照的任务?当我的测试套件仍在运行且他/她的测试可能失败时,可能会创建不正确的快照,甚至数据库可能会在测试套件结束时恢复为不正确的状态。在致电CreateDatabaseSnapshots();DeleteDatabaseSnapshots();之前必须进行哪些必要的检查?

我只想确保数据库在测试过程中不受影响。我已经尝试过使用备用数据库,事务范围和其他替代方案,但它们不能在我的场景中使用,因此使用快照是唯一可行的选项。

1 个答案:

答案 0 :(得分:2)

不是修改数据库的环境,而是为什么不这样做:

1.) Take database snapshot of your database.
2.) Attach database snapshot to the local machine of the test-user. (Test initialize)
3.) Modify the database on the test environment of the user during automated testing.

注意:您可以在清理期间停止将数据库重置回原始状态,因为每次测试初始化​​时都会创建目标数据库的新本地副本。 (或者只是处理本地数据库副本)

在测试期间,有时您希望拥有自己的OWN测试环境,除非您的测试场景应该包含来自不同测试人员的数据修改。