BDD正确给定设置

时间:2018-02-22 21:29:51

标签: php bdd behat

目前的公司决定使用selenium,PHP和Behat切换到BDD,并且根据我对使用Give的小黄瓜语言的理解,它是“前提条件”和#39;或情景的背景,但我对实施感到困惑,如果它超出了简单的给定:我在登录页面上。

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

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

我感到困惑的是,在某些使用Given的情况下,您可以在该步骤中启动web浏览器,而我已经看到的其他示例,人们在给定语句下面有明确的数据。

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

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

2 个答案:

答案 0 :(得分:1)

场景的上下文包含场景开始之前发生的事情。实现这一目标的一种简单方法是将它们置于过去或持续的现在时。所以这些都是背景:

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导致下一个给出:

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。也许您只是将相关数据直接放入数据库(小心,这可能有点脆)。在这种情况下,你没有行使系统的行为。

如果你确实想要行使任何行为,那么它就是在When而不是Given。

如果您与了解您正在尝试解决的问题的人进行对话,并询问他们如何运作的示例,他们通常会相当有效地为您总结这些问题。这是对话是BDD非常重要的一部分的另一个原因。

另请参阅页面对象模式,这有助于在执行此操作时保持步骤的可维护性。

答案 1 :(得分:0)

无关紧要,它们只是帮助您更好地了解场景各部分并帮助您了解场景的关键词。

  

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

在给定的情况下,您可以对场景进行设置或只打开页面。

示例:

鉴于我有一个新帐户

鉴于我有一封无效的电子邮件,例如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

第一个场景是注册,重点是填写注册表并提交,如果你在填充步骤中也需要,你也可以使用一些数据。

第二种情况是登录,你专注于登录,而Given只包含一步注册。

  

如果某些事情看起来很奇怪或很难,那么你做错了什么   如果场景过于复杂,那么你会错过一些积分   该场景应该易于阅读和理解而不会丢失在细节中   写作尽可能自然,就像你手动测试一样   最后,我建议阅读一本关于BDD的书,比如BDD的行动