我正在尝试对ASP.NET应用程序进行一些自动化Web测试。我希望使用Xunit.net扩展中的AutoRollback属性来撤消测试期间所做的任何数据库更改。 AutoRollback使用TransactionScope在测试之前启动事务,然后将其回滚。

当我尝试在交易期间点击我的网络应用程序时,它总是超时。看来这应该有用,有什么想法吗?这是我的测试:

[Fact]
[AutoRollback]
public void Entity_should_be_in_list()
{
    Entity e = new Entity
    {
        Name = "Test",
    };
    dataContext.Entities.InsertOnSubmit(e);
    dataContext.SubmitChanges();

    selenium.Open("http://localhost/MyApp");
    Assert.True(selenium.IsTextPresent("Test"));
}
有帮助吗?

解决方案

您的ASP.NET应用程序有一个单独的数据库上下文,它不知道您希望它加入由Xunit.net启动的事务。显然,数据库在事务启动时会锁定一些资源;网络应用程序耐心等待一段时间,最终放弃。

我认为最好的办法是从空数据库开始,使用SQL脚本创建模式并填充查找表(您的数据库是在源代码管理下,对吗?)。另一种方法是在运行测试之前备份数据库,然后在完成后恢复它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top