作为一般规则,请尽可能多地表达该场景,就好像您正在就此进行对话一样,并尽可能多地排除不相关的信息。
例如,我希望您在上面的场景中阅读如下内容:
Given our customer Bob Test is scheduling a repair order
And we have two technicians: "Fred Technician" and "George Nontechnician"
When Bob Test decides he wants a Personal Diagnostic
And he selects a technician
Then the search results should only contain "Fred Technician"
然后采取一切必要措施使这些步骤发挥作用 - 无论是登录还是其他方式。请注意,我没有讨论“页面”,也没有采取实际步骤 - 它们对于用户来说应该是直观的。 BDD 与测试无关。这是关于提出人们将如何使用该系统的示例,以便您可以围绕这些示例进行对话并探索它们,找到例外情况和不同的场景等。
检查过滤器是否可见是没有价值的。用户不关心过滤器是否可见。他关心的是他可以使用过滤器来获得结果,所以就这样做吧。
在代码中,我通常在步骤之间传递一个“World”对象。这可以让很多小家伙摆脱困境。我没怎么用过 Gherkin,但我想它也能提供类似的功能。您可以在其中存储所有用户详细信息,您创建了哪些技术人员,以便您可以检查它不会在结果中带回“George Nontechnician”等。
使用友好的角色名称也很有用,因为人们可以想象弗雷德和乔治的样子。
去掉任何不会对场景产生影响、也不会帮助人们想象它发生的东西。您知道鲍勃有权安排订单,因为这就是他正在做的事情 - 只需向该步骤添加必要的内容即可。
“何时”是您有兴趣描述的行为。在本例中,您对筛选个人诊断的能力感兴趣,因此与行为相关的所有用户交互都应位于“何时”中,并且所有先前的交互均应位于“给定”中。我发现尝试考虑结果不同的环境很有用 - 例如,如果没有 PD 技术人员,会发生什么?这告诉我有什么区别;我们将设置一个不同的context但执行相同的操作event。上下文属于“给定”,事件属于“何时”。 (在引入“背景”之前,这曾经要简单得多)。
一般来说,如果你在看某个场景时眼神呆滞,那么你就做错了。
希望这可以帮助。