3

在使用 SpecFlow 熟悉行为驱动开发后,我想知道是否有多个场景用于相同的功能,如下所示:

注册特征

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 功能文件的标签,以便我可以执行以下操作:

@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 特性,因此,它们应该在同一个 Register.feature SpecFlow 特性文件中定义,对吧?

4

1 回答 1

2

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

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

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

钩子允许按照某些规则执行要执行的测试子集。因此,可以使用预定义的上下文执行 When 方法

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

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

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

至于你的场景:

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
于 2013-12-08T23:32:40.903 回答