1

我在尝试使用 Selenium 和 NUnit 创建集成测试时遇到了一些问题。

我正在尝试在 NUnit 测试中使用 Selenium RC 来驱动我的 ASP.NET Web 应用程序,并希望测试能够真正完成真正用户会在 DB 中执行的所有操作。当然,如果数据库可以在 Selenium 完成它之后回滚,那将是很好的,并且我断言 db 包含来自 ui 的数据的新行(等)。

所以,这是我的设置(在某种伪代码中):

TestMethod()
{
    Using(new TransActionScope)
    {
        Selenium.StartSelenium()
        Selenium.SelectAndClickAndDoStuffInUI()
        AssertSomething()
    }
}

现在,SelectAndClickAndDoStuffInUI 方法在 UI 中单击,从而启动了我们专有的 da 框架。我们的框架将所有内容写入 db,AssertSomething 方法断言 db 中的一切都很好。框架在其内部工作中使用事务(“必需”)。

所以一切都很好,对吧?不,很遗憾没有。上面示例中的 TransActionScope 不应该被提交(那里没有 txScope.Complete()-call),因此所有内部事务也应该回滚,对吧?好吧,他们没有,而且 Selenium 通过 UI 所做的一切都会提交给 DB。

我真的试图了解哪里出了问题,但到目前为止还没有找到答案。

感谢阅读,(最后)这是实际问题:

为什么在我的示例中显示的情况下 TransactionScope 没有回滚?

我很乐意提供有关情况和设置的更多信息!

4

1 回答 1

3

您正在使用 UI 到 asp 应用程序。这意味着您的测试无法回滚您所做的更改。

事务范围只能在你自己的进程中工作。事务管理器如何撤消 Web 界面内的单击?它可能在任何地方。Selenium 只是远程控制浏览器。

您应该使用模拟对象创建“真实”单元测试,而根本不访问数据库。使用普通的 asp 页面有点困难,但您无法查看 asp.MVC 来找到解决此问题的可能方法。

于 2009-09-22T07:14:46.503 回答