2013-03-07 155 views
1

我知道這些都可以,但我想成爲紅寶石/黃瓜社區的更好成員。我有一個故事,測試我的網站的多個部分沒有任何鏈接,它不應該顯示。那麼這兩種方式中的哪一種是編寫場景的最佳方式。再次,我明白要麼會工作,但我正在尋找最佳實踐解決方案。我通常會使用選項B,因爲它們都測試不同的「然後」步驟;然而,我一直在進行一些研究,我第二次猜測我自己,因爲我可以用相同的給定語句測試所有場景,而且我正在閱讀,如果您要更改「給定」和「隨後」步驟。試圖完善我的黃瓜場景

A.

Scenario: A user that cannot access A, B, C, or D 
    Given I am a, user without access to A, B, C, or D 
    When I navigate to reports 
    Then I see the A header 
    But I cannot click on A's header 
    And I see error message under A stating the user does not have access 
    And I do not see the B section 
    And I do not see the C section 
    And I do not see the D section 

OR

B.

Scenario: A user that cannot access A 
    Given I am a, user without access to A 
    When I navigate to reports 
    Then I see the A header 
    And I see error message under A stating the user does not have access 
    But I cannot click on A's header 

Scenario: A user that cannot access B 
    Given I am a, user without access to B 
    When I navigate to reports 
    Then I do not see the B section 

Scenario: A user that cannot access C 
    Given I am a, user without access to C 
    When I navigate to reports 
    Then I do not see the C section 

Scenario: A user that cannot access D 
    Given I am a, user without access to D 
    When I navigate to reports 
    Then I do not see the D section 

回答

1

我認爲最好的做法是功能分解成其各個部分(在這種情況下,場景)

選項B更好,因爲它堅持遵循單一職責原則(當然這可以應用於許多不同的代碼部分)。 B書寫方式清晰直接。如果你在6個月內回來,或者新開發者第一次看到這個,你們都對測試的目標有了一個很好的想法。

選項A似乎做了很多,雖然這是一個集成測試,但您應該儘量保持被測代碼的特定部分儘可能獨立。問問你自己,當這個測試失敗時,你會知道到底是爲什麼嗎?或者你將不得不開始挖掘,看看測試的哪一部分實際上失敗了?

在此背景下,最佳實踐主張較小的代碼段。如果這些測試開始重複自己(幹,不要重複自己),你可以開始重構它們(或許Background

+0

我不喜歡使用背景,因爲接下來的具體內容是什麼場景正在做的事情並不是全部記錄在場景塊內。儘管它減少了該功能中的代碼量,並且最終會重複自己,但是當場景失敗時,您將擁有場景中的所有信息來重新創建失敗。否則,你將不得不去挖掘背景信息或更糟,在掛鉤之前。 – 2013-03-07 20:01:28

+0

如果開始重複自己,我只使用背景和乾燥作爲可能的下一步。乾燥的目的不是要減少代碼,而是要統一代碼並使其目的更加清晰。每個測試都應該清楚它的意圖。重複但不突出顯示的內容不應該分散注意力,也不應將注意力集中在我們測試中心的特徵/代碼上。 – AdamT 2013-03-07 20:16:46

0

我會代替ABC或D的更可讀的東西,只是認爲你的祖母需要明白這個定義,她不明白ABCD的意思。讓我們把它給一個基本的用戶 .. .. 那麼用戶無法看到的編輯工具,這樣

給超級用戶 .. .. 那麼超級用戶應該看到該編輯工具

只是嘗試加入那些ABCD在一些有意義的事情這樣的組名,n級,團隊等

則可以使用TestUnits每個項目之一:ABCD,如果你將

+0

我很明顯使用ABCD作爲實際物品的佔位符,但是這是針對一家公司的,我不確定他們會如何在我發佈 – 2013-03-07 20:24:46

+0

之前將其網站的具體細節放在論壇上。他們在一個單一的名字。或使用表格 http://www.ruby-doc.org/gems/docs/d/davidtrogers-cucumber-0.6.2/Cucumber/Ast/Table.html – 2013-03-07 20:27:46

1

粒度方案是可取的,因爲它們更明確地傳達了期望的行爲,並在迴歸時提供更好的診斷。隨着應用程序的發展,小型場景更容易維護。長時間的情景會產生一種「引力吸引力」,甚至會變得更長。在很長的情況下,很難弄清楚這些步驟的所有設置和副作用。其結果是長時間情景持續增長的「引力吸引力」。

場景大綱可以使您的測試既精細又簡潔。在以下示例中,顯而易見資源B,C和D都具有相同的策略,而資源A不同:

Scenario Outline: A user cannot access an unauthorized resource 
    Given I am a user without access to <resource> 
    When I navigate to reports 
    Then I do not see the <resource> section 

    Examples: 
     | resource | 
     | B  | 
     | C  | 
     | D  | 


Scenario: A user that cannot access A 
    Given I am a, user without access to A 
    When I navigate to reports 
    Then I see the A header 
    And I see error message under A stating the user does not have access 
    But I cannot click on A's header