BDD适当的给定设置

  • 本文关键字:设置 BDD php bdd behat
  • 更新时间 :
  • 英文 :


当前公司决定使用Selenium,php和Behat切换到BDD,并且根据我对使用给定的Gherkin语言的理解,这是场景的'前条件'或上下文,但是如果实现超出了一个简单的给定:我在登录页面上。

我感到困惑。

所以,如果我有一个功能文件,例如:

Feature: Sign up for an account
Scenario: Register using a temporary email address
Given I register a temporary email address at https://getnada.com/
And I register an account
And I click the link in my email to confirm new account
When I complete the registration process by setting a password
Then I should be on the User Profile page

我感到困惑的是,在某些情况下,您可以在此步骤中启动WebBrowser,而我看到的其他示例,人们在给定语句的下方有明确的数据。

我不确定是否应该自动化给定的步骤,因此,如果我运行相同的脚本,它可能会获取新的电子邮件地址

我应该刚刚完成给定的步骤并明确传递电子邮件地址和注册信息,因为该信息已经假定给出?

场景的上下文包含在场景开始之前发生的事情。正确解决这个问题的一种简单方法是将它们放入过去或持续的当前时态。所以这些都是上下文:

Fred bought a microwave for £100
I have an account with StackOverflow
Luke has the winning lottery ticket
I saved my document as "LostDog.docx"

givens应该真正彼此独立;他们发生什么顺序都不重要。

在您的情况下,两个givens导致下一个给出:

Given I register a temporary email address at https://getnada.com/
And I register an account
And I click the link in my email to confirm new account

因此,可以用代表它的终端的给定的一个给定总结。

Given I've clicked to confirm a new account with a getnada.com email address

从场景中看起来好像您可能有兴趣行使与单击链接并完成注册相关的所有行为。如果是这样,我会用以下内容来重塑:

Given I've requested a new account with a getnada.com email address
When I finish the registration by setting a password...

无论哪种情况,这些较大的步骤都可以包含其中的较小步骤。

请注意,在givens的情况下,您如何到达那里都没关系。也许您实际上给自己发送了一封电子邮件。也许您只是使用了API。也许您只是将相关数据直接放入数据库中(小心,这可能有点脆弱(。在这种情况下,您不会行使系统的行为。

如果您确实想行使任何行为,则在何时进行。

如果您与了解您要解决的问题的人进行对话,并询问他们应该如何工作的示例,他们通常会为您有效地总结这些问题。这是对话是BDD非常重要的另一个原因。

另请参见页面对象模式,该模式将有助于保持步骤可维护。

无关紧要,它们只是帮助您更好地看到场景部分并帮助您对场景有意义的关键字。

给定一些初始上下文
我做某事
然后结果

在给定的情况下,您可以为方案进行设置或仅打开页面。

示例:

鉴于我有一个新帐户

给定我有一封无效的电子邮件,例如test@mail

鉴于我在主页上

您需要记住方案的焦点

Given I am on register page
When I fill register form with valid info
And I submit the register form
Then I should be on the User Profile page
Given I have a new account
When I login with the new account
Then I should be on the User Profile page

第一种情况是用于寄存器,重点是填写寄存器表格并提交,也可以在填充步骤中使用一些数据。

第二种情况是用于登录,您专注于登录,并且给定包含单个步骤下的注册。

如果某事似乎很奇怪或很难,那么您在做错了什么
如果场景太复杂,那么您会缺少一些要点
场景应该易于阅读和理解而不会在细节中迷失方面
写作与手动测试一样自然是自然的
最后,我建议阅读一本关于BDD的书,例如BDD In Action

最新更新