2013-07-13 61 views
3

我正在爲我們的應用程序編寫一套黑盒自動測試。我一直在碰到同樣的設計問題,所以我想知道這裏有什麼人想想它。設計CRUD測試套件

基本上,這是一個簡單的CRUD系統。爲了說明起見,讓我們看看您正在測試屏幕以創建,查看,編輯和刪除用戶帳戶。我會喜歡要做的就是寫一個測試,測試的是用戶創建工作正常,另一個測試檢查,在查看用戶你顯示了相同的數據,您最初鍵入,另一個測試,檢查該修改用戶的作品,和最後是一個刪除用戶的測試。

麻煩的是,如果我這樣做,那麼測試必須在一定的順序執行,否則將無法正常工作。 (例如,您無法刪除尚未創建的用戶。)現在有人說測試設置應創建測試需要的所有內容,拆卸應該使系統恢復到一致狀態。但仔細想想......創建用戶測試將需要在之後刪除該用戶,並且刪除用戶測試必須先創建一個用戶...因此這兩個測試現在具有相同的代碼,唯一的區別是無論該代碼是在安裝/正文/拆解中。這似乎錯誤

總之,我似乎面臨着幾種選擇,所有這一切似乎打破:

  1. 使用安裝程序創建用戶和拆卸將其刪除。這將所有創建用戶和刪除用戶測試代碼複製爲安裝/拆卸代碼。
  2. 強制測試以特定順序運行。這違反了測試應該單獨運行並且可以以任何順序運行的原則。
  3. 寫一個巨頭測試,創建用戶,查看用戶,編輯用戶,然後刪除該用戶,都爲一個巨大的整塊。

注意,創建用戶是不是一件小事;涉及的步驟很多。同樣,當刪除一個用戶時,你必須指定如何處理他們指定的項目等等。這不是一個微不足道的操作。

現在,如果這是一個白盒測試,我可以模擬用戶帳戶對象,或者模擬保存它們的數據庫,甚至可以在磁盤上生成真正的數據庫。但是這些是黑盒子測試,它只測試外部的用戶可見界面。 (即,單擊屏幕上的按鈕)。這個想法是從頭到尾測試整個系統,而不用修改它[除了通過GUI命令,顯然]。

回答

3

我們有同樣的問題。我們走了兩條路。在一種測試風格中,我們使用建議和拆卸來建立測試需要的數據(用戶,門票等)。在另一種風格中,我們使用數據庫中預先存在的測試數據。因此,例如,如果測試是AdminShouldBeAbleToCreateUser,那麼我們就不會這樣做,因爲那是測試本身。但是如果測試是ExistingUserShouldBeAbleToCreateTicket,我們在測試數據中使用預定義的用戶,如果測試是UserShouldBeAbleToDeleteOwnTicket,我們使用預定義的用戶並在設置中創建票證。