2012-02-01 37 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

我想說複製和粘貼基本上只是對同一個方法進行多次調用。你正在使用相同的步驟定義,所以爲什麼不多次調用它們。複製/粘貼給我,完成你想要的。