Gherkin场景应该始终有步吗?

时间:2013-04-09 06:53:06

标签: cucumber bdd gherkin

在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

我不确定我会一直使用第二种变体。如果我有多个场景共享上下文“用户在帐户页面上”并且其中一些有其他用户操作,而其他人没有,那么在我看来将“用户在帐户页面”中保持为给定步骤应该是有效的即使某些情况可能缺乏“何时”。这是一种有效的方法吗?

4 个答案:

答案 0 :(得分:10)

正式和技术上Cucumber / SpecFlow不要求你写一个When-step或者更确切地说Given / When / Then只是按它们在场景中编写的顺序执行。在这方面,你不需要一个步骤。

但是,正如Andy Waite写的那样,When-step显示了系统从“Setup”获取的动作或事件,以进入在Then-step中验证的新状态。在这方面,每个测试都应该出现一个When-step(正如你所写的那样:我们测试的是什么)。

留下你的最终评论;如何验证只是设置(鉴于系统已启动,然后数据库是干净的,作为一个天真的例子)。在这种情况下,可以跳过When-step。

因此,与往常一样,它归结为可读性和理解力。编写方案是为了使我们对系统行为的思考具体而清晰。使用优化的表单来理解和了解相关行为。

在不考虑这一点的情况下,我可能会猜测,一般的建议是始终使用一个使事件或行为非常明显和明确的时步。在可能的情况下,我会回避隐性行为和隐藏行为。

我希望这会有所帮助。

答案 1 :(得分:3)

在这里同意Andy + Marcus,但我有一些可能有用的评论。

  1. Gherkin功能文件应作为系统行为的活文档。 因此,方案应提供足够的细节,以便向开发人员和其他项目利益相关者(产品所有者,测试人员等)传达体现该功能的业务规则。

    我认为您的问题可能源于在阐明情景时不考虑此业务规则的结束。我不得不问一个问题,什么是平衡?因此,我觉得你可能需要一个步骤来至少传达这个概念 - 在用户看到他们的平衡之前,他们必须有一个。

    Scenario: Show current balance
      Given I have a balance
       When I go to my account page
       Then I should see my balance
    
  2. 设置系统状态(即任何“给定”步骤)以使您能够清楚地测试系统是否正常工作非常重要 - 否则您将如何确定天平是否正确?您可能希望通过指定一些参数来使其更明确:

    Scenario: Show current balance
      Given my balance is £10
       When I go to my account page
       Then I should see my balance as £10
    
  3. 我不确定您使用的是哪个BDD框架,但我使用Behat,它允许您将多个Gherkin步骤映射到步骤定义。即

    user is on account page
    user goes to account page
    

    可以映射到将用户导航到页面的步骤定义。系统行为是相同的,区分这两者的唯一原因就是让你的场景更具可读性。

答案 2 :(得分:2)

通常情景包括3个部分:

  • 设置(给定)
  • 动作(何时)
  • 验证(当时)

有时不需要设置(或隐含)。但我想不出任何你不需要行动和验证的情况。

答案 3 :(得分:0)

根据我的理解,当你编写一个场景时,需要3个步骤。

  1. 您的申请应该在开始的状态。
  2. 用户必须做什么才能达到某种状态。
  3. 用户操作的结果/输入,即您的方案的结束点。
  4. 所以场景将是这样的:

    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