2013-02-27 124 views
4

我在这里寻找建议或最佳实践。为`Given`和`Then`定义相同的短语步骤

有时候我想给相同的正则表达式/短语使用不同的介词2个不同的步骤。我经常看到的情况是在GivenThen步骤中都有意义的短语。

Given被用于执行和操作(设置测试状态)的步骤。 和Then用于验证状态的步骤,但不执行操作。很多时候,我发现相同的措词适用于两者。一个例子这样的一句话就是:“我登录”

这里是一个人为的情景

Scenario: Login is saved between sessions. 
    Given I am logged in 
    When I exit the application 
    And I start the application 
    Then I am logged in 

当然,这不,在步骤定义工作,因为黄瓜没有一步谓词区分。

我已经玩过了添加'验证'到所有碰撞Then步骤,或添加一个'that'到所有重复的Given步骤。但没有什么是正确的。

Given that I am logged in. 
... 
Then verify I am logged in. 

它的工作原理,当然,但我觉得我失去了一些东西,不需要具有相同的“扩展谓词”大多数我的步骤。

+2

你可以使用'然后我应该登录' – 2013-02-28 08:09:18

+0

是的,那就是我在做什么。只是选择一个稍微不同的同一句话。我想在你的测试中标准化是唯一的方法。我真的希望你可以用同样的名字来定义When和Then的步骤。 – DragonFax 2013-03-01 04:23:02

+0

[两个步骤的定义是相同的,但一个是给定的,一个是的]的可能重复(https://stackoverflow.com/questions/47107183/two-step-definitions-that-are-the-same-但是酮是换给定和酮是换然后) – Marit 2017-12-30 10:57:52

回答

0

我有同样的问题,这是我得到了答案:

步骤定义必须是唯一的黄瓜知道要执行什么。另外,Given/When/Then关键字在技术上可以互换。它们是为了可读性的功能文件,但没有链接到实现。所以如果两个步骤(Given和Then)都做同样的事情,技术上没有问题;您应该能够使用您的功能文件中的相同步骤定义,前面带有'Given'或'Then'关键字。也就是说,您可能需要考虑重写您的步骤定义来描述预期的行为而不是实现,例如, “给定一个ID为xxx的元素”