2013-07-17 67 views
0

我說實話,我對此完全陌生。BDD如何隔離依賴於數據的測試

說我有以下情形:

Scenario: User grid displays information about all users 
Given the application have at least one user 
When I go to the user grid page 
Then I should see a list of user data in the user grid 

我怎麼能保證保持隔離這種情況下,而我所知道的應用程序包含在測試開始時沒有用戶數據的考驗嗎?

我可以看到下面的選項至今:

  1. 發射該方案之前,添加創建用戶的場景。 (這打破了隔離。)
  2. 有代碼檢查have at least one user,並插入,如果它不。 (從未在互聯網上看到過這種做法,這是正常的還是很好的做法?)

回答

0

我覺得你的測試太抽象了。嘗試更具體一點。如果你使用:

Given I add a user called bob 
When I view the users grid page 
Then I should see bob in the user list 

那麼我認爲這是現在更明顯,你需要使用一些你的選項2.你甚至可以考慮

Given I add a user called bob 
And I add a user called bill 
.... 

,或者如果你喜歡

Given I add an accounts team 
... 

不要忘記SpecFlow綁定只是方法,以便在幕後,你可以

[Given ("I add an accounts team")] 
public void GivenIAddAnAccountsTeam() 
{ 
    GivenIAddAUserCalled("bob"); 
    GivenIAddAUserCalled("bill"); 
} 

別忘了BDD是關於舉例的。這些例子應該有你需要的一切來描述你需要測試你的場景,所以不要讓它太弱。你也會發現,如果你讓你的對象知道實例,例如bob,誰不是管理員,但有權查看帳戶數據,那麼編寫這些場景會更容易。這樣,當你討論你的場景時,每個人都已經知道bob應該如何出現在用戶列表中。

+0

謝謝。這是一件很平常的事情嗎?「良好實踐」?對我來說,測試必須執行一些內務操作('清除所有用戶','添加一個名爲bob的用戶')似乎很奇怪。 –

+0

你是對的,通常你不想清除用戶,因爲你會開始每個場景新鮮。然而,有時您可能需要更復合的方法,「給定一個用戶bob」,然後是「給定\和一個用戶帳單」來構建您的場景,這就是我更想說明的。 – AlSki

+0

聽起來不錯。我應該把Bob的支票放在「背景」中嗎?我最近才發現SpecFlow支持'Background'。或者這是爲了別的嗎? –

相關問題