在使用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功能文件中定义,对吧?
答案 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