在小黄瓜中定义场景时,有时给定步骤和何时步骤之间没有明确的区别,即用户没有与系统进行主动交互,验证的目的是验证系统在某些情况下应该是什么样子。
请考虑以下几点:
Scenario: Show current balance
Given user is on account page
Then user should see his balancevs
Scenario: Show current balance
When user goes to account page
Then user should see his balance我不确定我是否会一直使用第二种变体。如果我有多个场景共享上下文"user is on account page“,其中一些有额外的用户操作,而另一些则没有,那么在我看来,将"user in account page”作为给定步骤是有效的,即使它在某些场景中可能缺少"When“。这是一个有效的方法吗?
发布于 2013-04-09 17:18:23
从形式上和技术上讲,Cucumber/SpecFlow并不要求您编写When-step,或者更确切地说,只要按照场景中编写的顺序执行给定的/When/Then就可以了。在这一点上,你不需要一个When-step。
但是,正如Andy Waite所写的,When-step显示了您的系统从“设置”中采取的操作或事件,以达到您在Then-step中验证的新状态。在这一点上,每个测试中都应该有一个When-step (正如您所写的:否则我们在测试什么)。
这就留下了你的最后的评论;如果只验证设置(假设系统已经启动,那么数据库就像一个天真的例子一样干净)。在这种情况下,可以跳过When-step。
因此,一如既往,它归结为可读性和理解性。编写场景是为了让我们对系统行为的想法具体而清晰。使用优化的表单来理解和学习有问题的行为。
不用过多考虑这一点,我可能会猜到,一般的建议是始终使用使事件或行为非常明显和清晰的When-step。在可能的情况下,我会避免含蓄和隐藏的行为。
我希望这能帮到你。
发布于 2013-04-09 15:32:19
一般情况下,一个场景由3部分组成:
设置(给定)和操作( When)
有时设置不是必需的(或者它是隐式的)。但我想不出有哪种情况下你不需要一个动作和验证。
发布于 2013-04-10 08:21:37
在这里我同意Andy + Marcus的观点,但我有一些可能有用的评论。
我认为您的问题可能是因为在阐明场景时没有从头到尾考虑这个业务规则。我不得不问别人这个问题,什么是平衡?因此,我觉得你可能至少需要一个步骤来传达这个概念-在用户可以查看他们的余额之前,他们必须有一个余额。
场景:显示当前余额假设我有余额当我转到我的帐户页面时,我应该看到我的余额
场景:显示当前余额假设我的余额是go 10当我转到我的账户页面时,我应该看到我的余额是go 10
用户在帐户页面用户转到帐户页面
都可以映射到将用户导航到页面的步骤定义。系统行为是相同的,区分这两者的唯一原因是为了使您的场景更具可读性。
https://stackoverflow.com/questions/15895210
复制相似问题