Gherkin "OR" 语法以减少 BDD 的重复
Posted
技术标签:
【中文标题】Gherkin "OR" 语法以减少 BDD 的重复【英文标题】:Gherkin "OR" syntax to reduce repetition with BDD 【发布时间】:2012-02-01 09:59:09 【问题描述】:有没有人知道实现这一目标的方法,或者他们认为这是一个好主意。在 Gherkin 中使用 OR 样式语法以减少重复但保持人类可读性(希望如此)。我正在考虑使用多个 OR 语句的每个组合扩展子句组合的情况。例如
Scenario: TestCopy
Given Some text is selected
When The user presses Ctrl + C
OR the user right clicks and selects copy
OR the user selects Edit + Copy
Then the text is copied to the clipboard
这将作为 3 个测试运行,每个测试都使用相同的给定值,然后使用 OR 集中的一个 When。我想这可以通过使用带有 When 子句占位符的模板来实现,但我认为这更具可读性,并且可以允许在 Given 中使用 OR 来生成 n x m 测试。有了大纲,您仍然需要 n x m 行。
有没有更好的方法来做到这一点 明确复制和粘贴是否更好(我认为维护可能会变得混乱) 其他框架是否支持此功能(我认为使用 FIT 您可以编写自定义表,但这似乎是开销)谢谢。
【问题讨论】:
我们自己想出了这个。小黄瓜+ 【参考方案1】:您可以使用Scenario Outlines: 从一个场景生成多个测试
Scenario Outline: TestCopy
Given Some text is selected
When <Copy operation executed>
Then the text is copied to the clipboard
Examples:
| Copy operation executed |
| The user presses Ctrl + C |
| the user right clicks and selects copy |
| the user selects Edit + Copy |
在Scenario Outline
中,您基本上创建了一个模板,该模板用提供的Examples
填充。
对于上面的示例,Specflow 将生成 3 个具有相同 Given
和 Then
以及 3 个不同 When
s 的测试:
When The user presses Ctrl + C
When the user right clicks and selects copy
When the user selects Edit + Copy
【讨论】:
【参考方案2】:不建议在场景中使用此详细级别(按这些键,右键单击)。正如您所意识到的,这使得它们冗长且重复。此外,这通常不是利益相关者需要或想要的信息。
最好的办法是在步骤定义中隐藏实现细节。你的场景是这样的:
Scenario: TestCopy
Given some text is selected
When the user copies the selected text
Then the selected text is copied to the clipboard
复制文本的不同方式将进入第三步定义。
【讨论】:
在这里完全同意@Marcelo!不要写系统是如何实现的以完成用户需要的。尝试找到更高层次的概念,例如上面的“用户复制选定的文本”。好多了! @MarcusHammarberg 我也被教导使用“What”而不是“How”来编写场景。但是,如果在系统中执行操作的方式不止一种(在这种情况下是复制文本),那么应该如何使用 SpecFlow 测试这些不同的选项?因此,为什么我认为进行迭代不同选项的测试似乎是正确的。【参考方案3】:至于 n x m 场景,我觉得当你想这样做时,你可能会弄错。
你没有给出一个明确的例子,但假设你想要这样的东西:
Given A block of text is selected
OR An image is selected
OR An image and some text is selected
When The user presses Ctrl + C
OR the user right clicks and selects copy
OR the user selects Edit + Copy
编写Then
子句将是一场噩梦。
相反,尝试两个测试...首先,正如@nemesv 所建议的那样 - 但将“文本选择”替换为通用“选择”。
Scenario Outline: TestCopy
Given I have made a selection
When <Copy operation executed>
Then my selection is copied to the clipboard
Examples:
| Copy operation executed |
| The user presses Ctrl + C |
| the user right clicks and selects copy |
| the user selects Edit + Copy |
然后您可以编写一个或多个附加测试来处理“什么是有效选择” - 这可能会通过您使用的一个特性独立于复制功能 - 例如,当您进行选择并点击删除...或 ctrl-v... 或拖放时会发生什么?
您不想走上一条道路,将所有有效的选择方式与您可以采取的所有有效操作相乘。
【讨论】:
【参考方案4】:我想说复制和粘贴本质上只是对同一个方法进行多次调用。您正在使用相同的步骤定义,所以为什么不多次调用它们。复制/粘贴,对我来说,完成你想要的。
【讨论】:
以上是关于Gherkin "OR" 语法以减少 BDD 的重复的主要内容,如果未能解决你的问题,请参考以下文章