2013-10-28 33 views
3

所以在我的應用程序中,我有網格與所有用戶註冊到網站的列表。現在我想用specflow和WatiN來測試它。Specflow - 正確的方式來測試網格數據

我想出了以下方案:

Scenario: List of users 
    Given I am logged in as "Admin" user 
    And There exists following users 
     | Username | First name | Last Name | Registration date | 
     | alice | Alice  | LAlice | 2013-10-28  | 
     | bob  | Bob  | LBob  | 2013-10-27  | 
    When I go to all users page 
    Then There should be following users in table 
     | Username | First name | Last Name | Registration date | 
     | alice | Alice  | LAlice | 2013-10-28  | 
     | bob  | Bob  | LBob  | 2013-10-27  | 

的問題是,這個表是整個步驟重複,我不知道這是正確的方式。有沒有更好的方法來測試數據是否加載到網格中?

回答

1

爲了檢查我正確理解問題,您擔心的是您在一個場景的Given和Then步驟中重複了表的定義(即,您沒有運行100個類似的場景,都需要相同的表集向上)。

它看起來像你有什麼很好。

請考慮如果UI需要少量數據轉換會發生什麼情況。 例如

Given I am logged in as "Admin" user 
And There exists following users 
    | Username | First name | Last Name | Registration date | 
    | alice | Alice  | Wonderland| 2013-10-28  | 
    | bob  | Bobby  | Tables | 2013-10-27  | 
When I go to all users page 
Then There should be following users in table 
    | Username | Full Name  | Registration date | 
    | alice | Alice Wonderland | 2013-10-28  | 
    | bob  | Bobby Tables  | 2013-10-27  | 

這種情況很明顯,你不能在這裏保存任何空間。

正如您所做的那樣,通過完全重複表格,您在測試/生活文檔中明確指出,您在頁面上看到的內容應與內存中的數據表示完全匹配。這在測試中值得表達。

Given I am logged in as "Admin" user 
And there exists the following users 
    | Username | First name | Last Name | Registration date | 
    | alice | Alice  | LAlice | 2013-10-28  | 
    | bob  | Bob  | LBob  | 2013-10-27  | 
When I go to all users page 
Then I should be able to see all the users 

這不是很清楚的,需要設立隨後來到步驟您共享數據與給定的步驟或實際查詢模擬數據上下文本身:

,可以節省一些空間的其他選項(一個非常糟糕的計劃,因爲測試可能會因爲錯誤原因而通過)。

如果你問是否有任何行C++的#define關鍵字來設置一個可重用的多行字符串const - 據我所知,沒有,如果有,你不應該使用它的原因以上清晰。

總之 - 我喜歡你的測試。 :)

---- ----編輯 有感:

測試應該失敗的確切原因之一。 可以說,你的測試正在測試「表格數據是否正確。」

但有時你只是想測試一些簡單的東西。例如。

Then user 'alice' should appear in the users table 
4

你可以用不同的方式處理這個測試,但同時下面的方法將從您的方案中刪除重複數據,它不一定是更有效,因爲測試將逐個檢查每個用戶。

你可以做的是重寫測試,以利用Specflow的Scenario Outline功能。然後,如果您要按照以下方式重寫場景,則只需定義一次用戶數據:

Scenario Outline: List of users 
Given I am logged in as "Admin" user 
And There exists <Username> with <First name> <Last Name> and <Registration date> 
When I go to all users page 
Then There should be <Username> with <First name> <Last Name> and <Registration date> 

    examples: 
    | Username | First name | Last Name | Registration date | 
    | alice | Alice  | LAlice | 2013-10-28  | 
    | bob  | Bob  | LBob  | 2013-10-27  | 
+0

+1這是查看此測試的非常有用的替代方法。正如你所說,它對於測試一個稍微不同的方面很有用:即「我可以在我的頁面上呈現下面的每一行數據」 - 如果你關心像unicode格式化或html/javascript注入這樣的事情,那麼這很有用。如果測試要檢查整個數據集的完整性或自動分類等,那麼這將不太合適。 – perfectionist

+0

@perfectionist是的,你是正確的,很高興你明白答案。我的答案顯示瞭如何刪除功能文件中的重複數據,但正如您所說,您無法驗證所有條目是否在臨時屏幕上顯示。 –

相關問題