TransactionScope 回滚可以与 Selenium 或 Watin 一起使用吗?

发布于 2024-07-24 23:00:50 字数 542 浏览 3 评论 0原文

我正在尝试对 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"));
}

I am trying to do some automated web testing of my ASP.NET application. I was hoping to use the AutoRollback attribute from Xunit.net extensions to undo any database changes that were made during the test. AutoRollback uses TransactionScope to start a transaction before the test and roll it back afterwards.

When I try to hit my web application during a transaction, it always times out. It seems like this should work, any ideas? Here is my test:

[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"));
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

守望孤独 2024-07-31 23:00:50

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

我认为你最好的选择是从空数据库开始并使用 SQL 脚本创建架构并填充查找表(你的数据库是 在源代码控制下,对吧?)。 另一种方法是在运行测试之前备份数据库,然后在测试完成后恢复数据库。

Your ASP.NET application has a separate database context and it has no idea that you want it to join transaction started by Xunit.net. Apparently, the database locks some resources when transaction starts; web application waits patiently for some time and eventually gives up.

I think your best bet is to start from empty database and use SQL script to create schema and populate lookup tables (your database is under source control, right?). Another approach is to backup database before running the tests and then restore it once they finish.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文