2013-04-09 70 views
4

当小黄瓜定义场景有时有鉴于和当步骤之间没有明显的区别,即,存在与从用户和验证的目的,系统中没有活性相互作用,以验证系统应该如何看在某些情况下。小黄瓜情况应该总是有步骤吗?

考虑以下几点:

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

大约只可读性。没有“应该”这样的事情。情景不需要有“何时” – 2013-04-09 07:19:29

回答

9

形式上和技术上黄瓜/ SpecFlow不需要你写一个当步或者更确切地说,鉴于/时/然后在命令刚执行的都写在方案中。在这方面你不需要一个时间步骤。

但是,正如安迪·怀特写了一下,当步上显示的动作或事件,您的系统从“设置”才能到达您在随后步验证新的状态。在这方面,每个测试都应该存在一个时间步骤(正如你所写的:我们测试的是什么)。

这使得你最后的评论;那么如何验证设置(假定系统已启动,那么数据库就像一个天真的例子一样干净)。在这种情况下,可以跳过When-step。

所以,一如既往地把它归结为可读性和理解。编写场景是为了使我们对系统行为的思考具体而清晰。使用优化的形式来理解和学习有关的行为。

想都没想太难这个我可能会想,一般的建议是始终使用时步,使事件或行为非常明显和清晰。在可能的情况下,我会避开隐含和隐藏的行为。

我希望这会有所帮助。

+0

感谢Markus!说得通。 – 2013-04-09 10:20:16

+0

不客气! – 2013-04-09 12:07:51

2

一般的场景由3个部分组成:

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

有时设置ISN” t要求(或者是隐含的)。但我想不出任何你不需要采取行动和核实的情况。

+0

完全同意验证(为什么测试否则?)在某些情况下仍然不太确定行动。如果我们只需要验证设置是正确的呢? – 2013-04-09 08:15:52

+0

在编写测试时你可能会这么做,但我认为你不会这样。 – 2013-04-09 12:58:39

+0

你看到什么动作[例如](https://stackoverflow.com/questions/47892611/how-to-test-filters-based-on-authorization-using-gherkin)? – komarik 2017-12-19 18:03:06

3

安迪+马库斯同意在这里,但我有一些意见,可能是有用的。

  1. 小黄瓜特征文件应作为系统行为的活文档。 由于这个原因,场景应该提供足够的细节来向开发人员和其他项目利益相关者(产品所有者,测试人员等)传达体现该功能的业务规则。

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

    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框架,但我用贝哈特它允许你映射多个小黄瓜一步一个步骤定义。即

    user is on account page 
    user goes to account page 
    

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

+0

谢谢Rob,好点。 – 2013-04-10 14:04:59

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