2

我们目前正在使用 Watin 对我们的 Web 应用程序进行 UI 测试。实际上,我们正在从上到下进行集成测试,因为我们使用的是测试数据库而不是模拟。

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

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

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

如果有人对如何为每个 UI 测试重置我们的测试数据有任何其他建议,我很想听听您的想法。

4

1 回答 1

3

如果您在 process中启动 Visual Studio 开发 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 时,它​​们的更改将全部回滚。

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

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

于 2009-03-26T22:49:25.723 回答