如何在构建服务器上运行specflow测试?

时间:2012-09-12 17:51:13

标签: c# specflow

如何在构建服务器上使用Nunit 2.6.1运行specflow测试?

另外,如何维护和组织这些测试以在构建服务器上成功运行,多个自动化程序员编写单独的测试?

1 个答案:

答案 0 :(得分:1)

我现在将尝试回答你问题的第二部分:

“你如何维护并组织这些测试,以便在构建服务器上成功运行,多个自动化程序员编写单独的测试?”

这种测试很有可能变成一个难以维护的混乱,这就是原因:

  • 步骤用于创建上下文(用于场景测试)
  • 步骤可以按任何顺序从任何场景中调用

由于这两个简单的事实,很容易将此模型与程序/结构化编程进行比较。场景上下文与某些全局变量没有区别,步骤是可以随时在任何地方调用的一些方法。

我的团队为避免步骤文件中的大量混乱而做的是让它们尽可能地保持愚蠢。一步所做的就是解析和调用将执行真正有意义的工作并保持当前测试的上下文的服务。我们将这些服务称为“xxxxDriver”(其中xxxx是我们正在处理的域对象)。

一个愚蠢的例子:

[Given("a customer named (.*)")]
public void GivenACustomer(string customerName)
{
  _customerDriver.CreateCustomer(customerName);
}


[Given("an empty schedule for the customer (.*)")]
public void GivenEmptySchedule(string customerName)
{
  var customer = _customerDriver.GetCustomer(customerName);
  _scheduleDriver.CreateForCustomer(customer);
}

'xxxxxDriver'将包含所有存储库,网关,存根,模拟或与相关域对象相关的任何内容。另一个重要细节是,如果您在步骤文件中注入这些驱动程序,specflow将为每个方案创建一个实例,并在所有步骤文件中使用它。

这是我们发现保持和扩展步骤的方式保持一致性的最佳方式,而不会在一个大团队触及相同代码库的情况下踩到彼此的脚趾。另一个巨大的优势是它帮助我们找到类似的步骤来浏览驱动程序类中方法的用法。

specflow代码库本身有一个明显的例子。 (看看drivers文件夹) https://github.com/techtalk/SpecFlow/tree/master/Tests/TechTalk.SpecFlow.Specs