2012-02-01 39 views
5

有谁知道一种方法来实现这一点,或者他们认为这是一个好主意。在Gherkin中使用OR风格语法来减少重复但保持人的可读性(希望)。我正在考虑在多个OR语句的每个组合中扩展子句组合的情况。例如小黄瓜“或”语法,以减少与BDD的重复

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

我们只是自己想出了这个。小黄瓜+ – mcintyre321 2016-12-06 11:53:55

回答

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步的定义。

+1

完全同意@Marcelo在这里!不要写关于如何实现系统以完成用户需要的内容。尝试找到更高层次的概念,例如上面的“用户复制选定的文本”。好多了! – 2012-02-01 15:28:06

+0

@MarcusHammarberg我也被教导使用“What”而不是“How”来写场景。但是,如果在系统中有更多的方法来执行某个操作(在这种情况下复制文本),那么应该如何使用SpecFlow测试这些不同的选项?因此,为什么我认为有一个迭代通过不同选项的测试似乎是正确的。 – 2013-12-13 22:52:24

11

您可以从一个场景与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   | 

generatd多个测试在Scenario Outline你基本上建立其填充在与所提供的Examples的模板。
对于上面的例子Specflow将产生3个测试用相同的GivenThen,并与3个不同的When S:

When The user presses Ctrl + C 
When the user right clicks and selects copy 
When the user selects Edit + Copy 
4

对于的n×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 ...或拖放时会发生?

你不想在选择所有有效的选择方式时选择所有有效的选择方式,

0

我想说复制和粘贴基本上只是对同一个方法进行多次调用。你正在使用相同的步骤定义,所以为什么不多次调用它们。复制/粘贴给我,完成你想要的。