规范要素文件中的多个方案?

时间:2013-12-08 00:38:55

标签: tags bdd specflow scenarios feature-file

在使用SpecFlow在行为驱动的开发中变得更加舒适之后,我想知道有多个场景用于以下相同的功能:

  

Register.feature

Feature: Register a new user
    In order to use the system,
    one must register with the system 
    so that one gets authorized and may login

Scenario: Register a new user using valid credentials
    Given I am on the registration page
    When  I have entered my desired username "UserName" and password "password"
      And I have confirmed my password "password"
      And I click the register button
    Then  I shall get confirmation that I am now a registered user

除了我的场景可能有点太胖之外,还必须设法验证注册过程中的其他场景,例如:

  • 输入用户名太短
  • 输入密码太短
  • 输入密码不包含数字
  • 输入密码与确认密码不匹配

仅举几例。我已经阅读了使用SpecFlow Feature File的标签,以便我可以按照以下步骤进行:

@shorterPasswordProvided
Scenario: Register a user using a password that is too short
    Given I am on the registration page
    When  I have entered my desired user name
      And I have provided a password that is too short "allo"
      And I click the Register button
    Then  I shall get an error message which mentions about the password minimum length

@noCredentialsAtAll
Scenario: Register a user using no credentials at all
    Given I am on the registration page
    When  I click on the Register button with no credentials entered
    Then  I shall get an error message that says I have to fill all required fields in

然后,使用[BeforeScenario("myTag")]就可以了。

钩子允许执行按照某些规则执行的测试子集。因此,可以使用预定义的上下文执行When方法,即,要执行它的钩子,并通过BeforeScenario或类似属性提及。

我是否理解正确,或者我在这里迷雾吗?

我推得太远了?

我错过了什么吗?

是否所有“太短的密码”,“没有提供凭据”都考虑了不同的使用场景,或者它们是否只能适合代码中的其他位置,例如单元测试本身?

我的意思是,所有这些场景都属于注册功能,因此,它们应在相同的Register.feature SpecFlow功能文件中定义,对吧?

1 个答案:

答案 0 :(得分:2)

好的,你有几个问题,所以我会解决这些问题:

  

然后,使用[BeforeScenario(“myTag”)]应该可以解决问题。

BeforeScenario hook属性用于在场景执行之前运行一些代码。它通常用于为场景设置环境(例如,用相关数据填充测试数据库);如果用于此目的,则AfterScenario的使用也可用于清除BeforeScenario的结果。

  

钩子允许执行测试的子集   遵循某些规则执行。那么,一个When方法就可以了   使用预定义的上下文执行

如果我理解正确,您希望能够使用标记来控制场景中的某个步骤何时可以运行/不运行。使用SpecFlow的钩子属性是不可能的;有一个BeforeStep挂钩,但这只能让你在步骤运行之前执行代码,它不允许忽略该步骤。

  

是否考虑了所有“太短密码”,“没有提供凭据”   不同的使用场景,或者它们是否只能是其他东西   适合代码中的其他地方,比如单元测试自己?

在您的示例中,是的,这些是“注册新用户”功能的不同方案。如果您采用严格的BDD方法进行开发,那么使用“从外到内”开发方法,您还将实施单元测试(通过回退到TDD作为BDD流程的一部分),这也将涵盖“太短密码“和”没有凭证提供“验证。

至于你的情景:

When  I have entered my desired username "UserName" and password "password"

使用:

而不是使用它
When I enter my  username "UserName" 
And I enter my password "password"

通过执行此操作,您将能够在“使用太短的密码注册用户”中重复使用“当我输入密码时”。这导致我:

And I have provided a password that is too short "allo"

没有必要单独指出密码太短的步骤。只需重复使用:

When I enter my password "allo"

出于同样的原因,请不要使用:

When I click on the Register button with no credentials entered

只是重用:

When I click on the Register button