使用SpecFlow进行功能范围的步骤定义?

Rog*_*mbe 18 specflow

我正在使用SpecFlow进行一些BDD风格的测试.我的一些功能是UI测试,所以他们使用WatiN.有些不是UI测试,所以他们没有.

目前,我有一个StepDefinitions.cs文件,涵盖了我的所有功能.我有一个BeforeScenario初始化WatiN 的步骤.这意味着我的所有测试都会启动Internet Explorer,无论他们是否需要它.

在SpecFlow中是否有任何方法可以将特定的特征文件与特定的步骤定义集相关联?或者我是从错误的角度接近这个?

mfl*_*yan 29

如果您使用标签,则可以使用简单的解决方案解决问题.

首先标记您的特征文件,以指示特定功能需要WatiN,如下所示:

Feature: Save Proportion Of Sample Pool Required
  As an <User> 
  I want to <Configure size of the Sample required> 
  so that <I can advise the deployment team of resourcing requirments>.

  @WatiN
  Scenario: Save valid sample size mid range
  Given the user enters 10 as sample size
  When the user selects save
  Then the value is stored
Run Code Online (Sandbox Code Playgroud)

然后使用指示标记的属性装饰BeforeScenario绑定:

[BeforeScenario("WatiN")]
public void BeforeScenario()
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后,仅针对使用WatiN的功能调用此BeforeScenario方法.


jba*_*ndi 15

目前(在SpecFlow 1.3中)步骤定义是全局的,不能限定为特定功能.

这与设计具有与Cucumber相同的行为.

我在黄瓜组问了同样的问题:

http://groups.google.com/group/cukes/browse_thread/thread/20cd7e1db0a4bdaf/fd668f7346984df9#fd668f7346984df9

基线是,所有要素文件定义的语言也应该是全局的(整个应用程序的一个全局行为).因此,应避免对特征进行范围定义.我个人还不完全相信这个......

但是,只有在需要UI集成的场景中启动WatiN的问题可以通过两种不同的方式解决:

  • 标记和标记的钩子:您可以标记您的场景(即使用@web)并定义ina之前的场景,仅适用于具有特定标记的场景(即[BeforeScenario("web")]).请参阅BookShop示例中的Selenium集成:http://github.com/techtalk/SpecFlow-Examples/blob/master/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Selenium/Support/SeleniumSupport.cs

  • 我们经常将绑定到UI的场景和绑定到程序API(即控制器,视图模型......)的场景完全分离到不同的项目中.我们试图在我们的BookShop示例中说明这一点:http://github.com/techtalk/SpecFlow-Examples/tree/master/ASP.NET-MVC/BookShop/ .


小智 8

检查一下(SpecFlow 1.4中的新功能):https://github.com/techtalk/SpecFlow/wiki/Scoped-Bindings