有序硒单元测试n

时间:2013-09-10 14:34:14

标签: unit-testing visual-studio-2012 selenium

我有一个小问题,我已经创建了一些Selenium测试。问题是我无法订购我创建的测试用例。我知道不应该订购单元测试,但这是我在我的情况下所需要的。我必须遵循以下步骤:首先登录,创建新客户,更改有关客户的一些详细信息,然后最终注销。

由于没有在NUnit中订购单元测试的选项,我无法执行此操作。

我已经尝试了另一个选项,在Visual Studio中创建一个unittest项目,因为Visual Studio 2012能够创建一个有序的单元测试。但这不起作用,因为我在运行ASP.NET项目时无法运行单元测试。另一个解决方案文件也不是一个好的选择,因为我想在Selenium测试提交后验证我的数据。

你们中有人有另一种解决方案来解决我的问题吗?

1 个答案:

答案 0 :(得分:1)

如果您想按特定顺序测试所有这些步骤(并通过它的声音,作为单个会话),那么它实际上更像是您正在谈论的验收测试;在这种情况下,编写更复杂的测试方法并在每个步骤后断言您的条件是不是罪

如果要在真正的隔离中测试每个步骤(纯单元测试),那么每个单元测试必须能够自行运行而不需要任何其他测试;但是当你测试实际的网站用户界面本身时,这对你来说真的不是一个选择。


当然,如果你真的想让每一个测试以某种方式设置每一个依赖,而不参考任何其他动作(例如在上一次测试中你需要伪造登录令牌,你的数据层将不得不假装你增加了一个新的客户等。很多工作可疑的好处...)

我之所以这样说,是因为您已经为服务器端控制器,图层,模型等编写了单元测试,而您没有参考浏览器中运行的实际站点而运行它们,因此确信您网站的各个后端部分可以执行他们应该执行的操作


在您的情况下,我建议更多的混合集成/验收测试

void Login(IWebDriver driver)
{
   //use driver to open browser, navigate to login page, type user/password into box and press enter

}

void CreateNewCustomer(IWebDriver driver)
{
  Login(driver);
  //and then use driver to click "Create Customer" link, etc, etc

}

void EditNewlyCreatedCustomer(IWebDriver driver)
{
  Login(driver);
  CreateNewCustomer(driver);
  //do your selenium stuff..

}

and then your test methods:
[Test]
void Login_DoesWhatIExpect()
{
  var driver = new InternetExplorerDriver("your Login URL here");   
  Login(driver);
  Assert(Something);
}
[Test]
void CreateNewCustomer_WorksProperly()
{
   var driver = new InternetExplorerDriver("your Login URL here");   
   CreateNewCustomer(driver);
   Assert(Something);
}
[Test]
void EditNewlyCreatedCustomer_DoesntExplodeTheServer()
{
   var driver = new InternetExplorerDriver("your Login URL here");   
   EditNewlyCreatedCustomer(driver);
   Assert(Something);
}

通过这种方式,具体测试的顺序无关紧要;当然,如果Login测试失败,那么CreateNewCustomerEditNewlyCreatedCustomer测试也将失败,但在这种情况下,这实际上是无关紧要的,因为您正在测试整个操作的“线程”