有没有人知道实现这一目标的方法,或者他们认为这是一个好主意。在Gherkin中使用OR样式语法来减少重复但保持人类可读性(希望如此)。我正在考虑使用多个OR语句的每个组合扩展子句组合的情况。 e.g。
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子句的占位符的模板实现的,但我认为这更具可读性,并且可以允许OR在Given中使用以产生n x m个测试。使用轮廓,您仍然需要n x m行。
感谢。
答案 0 :(得分:12)
您可以使用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将使用相同的Given
和Then
以及3个不同的When
生成3个测试:
When The user presses Ctrl + C
When the user right clicks and selects copy
When the user selects Edit + Copy
答案 1 :(得分:9)
不建议在场景中使用此详细级别(按这些键,右键单击)。正如你所知,这使得它们冗长而重复。此外,这通常不是利益相关者需要或想要的信息。
最好的方法是隐藏步骤定义的实现细节。您的方案将类似于:
Scenario: TestCopy
Given some text is selected
When the user copies the selected text
Then the selected text is copied to the clipboard
复制文本的不同方法将转到第3步定义。
答案 2 :(得分:4)
至于 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 ...或拖放时会发生什么?
您不希望将所有有效的选择方法与您可以采取的所有有效措施相加。
答案 3 :(得分:0)
我要说复制和粘贴基本上只是对同一个方法进行多次调用。你使用相同的步骤定义,所以为什么不多次调用它们。复制/粘贴给我,完成你想要的东西。