11

在 Gherkin 中定义场景时,有时 Given 和 When 步骤之间没有明确的区别,即用户没有与系统进行主动交互,验证的目的是验证系统在特定情况下的外观。

考虑以下:

Scenario: Show current balance
Given user is on account page
Then user should see his balance

对比

Scenario: Show current balance
When user goes to account page
Then user should see his balance

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

4

4 回答 4

17

从形式上和技术上,Cucumber/SpecFlow 不需要您编写When-step,或者更确切地说 Given/When/Then 只是按照它们在场景中的写入顺序执行。在这方面,您不需要When-step。

但是,正如 Andy Waite 所写,When 步骤显示了您的系统从“设置”采取的操作或事件,以达到您在 Then 步骤中验证的新状态。在这方面,每个测试中都应该出现一个When-step(正如您所写的那样:我们要测试什么)。

这留下了您的最终评论;仅验证设置怎么样(假设系统已启动,那么数据库是干净的,作为一个幼稚的例子)。在这种情况下,可以跳过何时步骤。

因此,与往常一样,它归结为可读性和理解性。编写场景是为了使我们对系统行为的想法具体而清晰。使用优化的形式来理解和学习相关行为。

如果不仔细考虑这一点,我可能会猜测一般建议是始终使用When-step,使事件或行为非常明显和清晰。如果可能,我会回避隐含和隐藏的行为。

我希望这有帮助。

于 2013-04-09T09:18:23.480 回答
6

一般来说,一个场景由 3 个部分组成:

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

有时不需要设置(或者它是隐式的)。但我想不出任何不需要采取行动和验证的情况。

于 2013-04-09T07:32:18.937 回答
4

同意 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 步骤映射到一个步骤定义。IE

    user is on account page
    user goes to account page
    

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

于 2013-04-10T00:21:36.730 回答
0

据我了解,当您编写场景时,需要 3 个步骤。

  1. 您的应用程序在开始时应处于的状态。
  2. 用户必须做什么才能达到某个状态。
  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
于 2013-04-11T06:32:28.437 回答