如果您想以特定顺序测试所有这些步骤(并且通过它的声音,作为单个会话),那么实际上它更像是您正在谈论的验收测试;在这种情况下,编写更复杂的测试方法并在每一步之后断言你的条件并不是一种罪过。
如果您想真正孤立地测试每个步骤(纯单元测试),那么每个单元测试必须能够独立运行,而无需参考任何其他测试;但是当您测试实际的站点 UI 本身时,这对您来说并不是一个真正的选择。
当然,如果你真的想让每一个测试以某种方式设置每一个依赖而不参考任何其他操作(例如,在最后一个测试中你需要伪造登录令牌,你的数据层将不得不假装你添加了一个新的客户等。很多工作都是为了可疑的利益......)
我这样说是基于假设您已经为服务器端控制器、层、模型等编写了单元测试,您在没有任何参考在浏览器中运行的实际站点的情况下运行这些单元测试,因此相信各种支持 -结束您网站的一部分做他们应该做的事情
在你的情况下,我会推荐更多的混合集成/验收测试
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
测试失败,那么CreateNewCustomer
andEditNewlyCreatedCustomer
测试也会失败,但在这种情况下这实际上是无关紧要的,因为您正在测试整个“线程”的操作