代码之家  ›  专栏  ›  技术社区  ›  Cole

管理测试数据:能否将所有数据库连接登记到单个事务中?

  •  2
  • Cole  · 技术社区  · 17 年前

    为了确保测试数据库处于预期状态,我们以前一直在使用SQLServer的快照功能在每个测试开始时回滚数据库。这相当慢,而且在快照恢复后会立即导致错误。

    由于每个测试都调用UI并可能使用多个db连接,因此我们无法在每个连接上启动事务。

    我想知道是否有可能以某种方式将所有数据库连接附加到单个事务,并在以后回滚它们?这可能必须在db级别本身发生。

    1 回复  |  直到 17 年前
        1
  •  3
  •   David M    17 年前

    进行中 ,Visual Studio development web服务器的实例,然后运行WatiN测试,然后可以将测试封装在单个块中,如下所示:

    using (new TransactionScope())
    {
        var server = new Server(PORT_NUMBER, VIRTUAL_PATH, PHYSICAL_PATH);
        server.Start();
        try
        {
            using (var ie = new IE())
            {
                // TODO: perform necessary testing using ie object
            }
        }
        finally
        {
            server.Stop();
        }
    }
    

    理论上,您的所有数据库连接都将登记在单个分布式事务中,并且在处理TransactionScope时,它们的更改都将回滚。

    要运行进程中的dev web服务器,您需要从GAC中提取WebDev.WebHost.dll并在项目中引用它-这是上面代码段中服务器类的源。如果您需要更详细的说明,请告诉我。

    您需要确保MSDTC正在运行,如果您和数据库之间存在防火墙,则根据端口设置,您可能会遇到困难。启动进程中的服务器的另一个好处是WatiN测试现在可以帮助测量代码覆盖率。