在Gherkin中定义场景时,有时在给定步骤和时间步骤之间没有明确的区别,即用户与系统没有主动交互,验证的目的是验证系统在某些情况下应该如何看待。
请考虑以下事项:
Scenario: Show current balance
Given user is on account page
Then user should see his balance
VS
Scenario: Show current balance
When user goes to account page
Then user should see his balance
我不确定我会一直使用第二种变体。如果我有多个场景共享上下文“用户在帐户页面上”并且其中一些有其他用户操作,而其他人没有,那么在我看来将“用户在帐户页面”中保持为给定步骤应该是有效的即使某些情况可能缺乏“何时”。这是一种有效的方法吗?
答案 0 :(得分:10)
正式和技术上Cucumber / SpecFlow不要求你写一个When-step或者更确切地说Given / When / Then只是按它们在场景中编写的顺序执行。在这方面,你不需要一个步骤。
但是,正如Andy Waite写的那样,When-step显示了系统从“Setup”获取的动作或事件,以进入在Then-step中验证的新状态。在这方面,每个测试都应该出现一个When-step(正如你所写的那样:我们测试的是什么)。
留下你的最终评论;如何验证只是设置(鉴于系统已启动,然后数据库是干净的,作为一个天真的例子)。在这种情况下,可以跳过When-step。
因此,与往常一样,它归结为可读性和理解力。编写方案是为了使我们对系统行为的思考具体而清晰。使用优化的表单来理解和了解相关行为。
在不考虑这一点的情况下,我可能会猜测,一般的建议是始终使用一个使事件或行为非常明显和明确的时步。在可能的情况下,我会回避隐性行为和隐藏行为。
我希望这会有所帮助。
答案 1 :(得分:3)
在这里同意Andy + Marcus,但我有一些可能有用的评论。
Gherkin功能文件应作为系统行为的活文档。 因此,方案应提供足够的细节,以便向开发人员和其他项目利益相关者(产品所有者,测试人员等)传达体现该功能的业务规则。
我认为您的问题可能源于在阐明情景时不考虑此业务规则的结束。我不得不问一个问题,什么是平衡?因此,我觉得你可能需要一个步骤来至少传达这个概念 - 在用户看到他们的平衡之前,他们必须有一个。
Scenario: Show current balance
Given I have a balance
When I go to my account page
Then I should see my balance
设置系统状态(即任何“给定”步骤)以使您能够清楚地测试系统是否正常工作非常重要 - 否则您将如何确定天平是否正确?您可能希望通过指定一些参数来使其更明确:
Scenario: Show current balance
Given my balance is £10
When I go to my account page
Then I should see my balance as £10
我不确定您使用的是哪个BDD框架,但我使用Behat,它允许您将多个Gherkin步骤映射到步骤定义。即
user is on account page
user goes to account page
可以映射到将用户导航到页面的步骤定义。系统行为是相同的,区分这两者的唯一原因就是让你的场景更具可读性。
答案 2 :(得分:2)
通常情景包括3个部分:
有时不需要设置(或隐含)。但我想不出任何你不需要行动和验证的情况。
答案 3 :(得分:0)
根据我的理解,当你编写一个场景时,需要3个步骤。
所以场景将是这样的:
Given the user is on the profile page
When the user goes to the balance page
Then the user should see their balance
用户可以点击按钮或链接以获取余额。
然后有一个背景:
Given the user is logged in
And the user has a balance