2009-12-25 35 views
1

問候, 我目前正在探索一些極限編程,並嘗試儘可能地堅持下去。這意味着,一旦我開始迭代(當然,在計劃發佈之後),我將需要將我的(現在,意外厚的一堆)用戶故事變成驗收測試。Web應用程序:驗收測試:測試和測試隔離的初始狀態?

我不完全確定要使用的實現語言,但是,我相信這將成爲一個動態Web應用程序,它具有由Web服務器提供的數據庫後端。目前,我計劃在本地機器上開發第一個具有本地測試環境的發行版,因此可以假設安全性不在驗收測試中考慮(所以,我可以將驗收測試作爲根訪問測試數據庫的依據涉及,例如)。但是,我仍然對使用驗收測試框架感到不確定,因爲這將是一個Web應用程序,我想我會使用Selenium RC來編寫測試並運行它們(我提到這個是爲了防止某人能夠指向我更好的東西:))。

但是,仍然有一個黑暗的領域:我沒有這個應用程序的數據,因爲我正在實施一個新的,新的應用程序。因此,我無法獲取當前生產數據庫的快照以獲取測試數據庫,此外,該應用程序是有狀態的(因爲任何具有數據庫後端的Web應用程序都是這樣),因此使用單個數據庫進行所有驗收測試在測試隔離方面引起難看的問題(至少對於單元測試來說,這樣做的結果是「這可能會帶來很多樂趣和很多灰色頭髮」)。

那麼,我該如何解決這個問題呢?我是否創建人工測試數據庫(並在數據庫模式發生變化時對其進行維護)並編寫驗收測試,以便在運行測試之前,每個驗收測試都將相應的數據庫狀態加載到測試數據庫中? (當很多強度測試運行時,將一次加載十幾條記錄的速度有多快或多麼慢?)我應該創建一個示例數據庫,爲所有測試加載這個數據庫並希望獲得最好的結果嗎?我應該在驗收測試中重新創建我需要的所有測試數據嗎?或者,人們如何做到這一點?

回答

0

根據進一步的研究,正確的方法是使用合適的setUp方法將數據庫置於已定義的狀態。這實際上涉及刪除表中的所有現有數據,向表中添加特定的測試數據集,然後在此數據上運行測試。之後,拆卸方法會清除對錶格所做的任何操作(setUp會丟棄所有內容,或者拆除所有內容)。有像dbUnit這樣的工具可以簡化這個過程。這導致測試速度有所降低,但是,它確立了測試的完全隔離,這是一件好事,因爲那麼綠色意味着綠色和紅色僅僅意味着紅色,而不是「考慮到測試執行的當前順序, 」。

除此之外,速度問題對我來說可能不那麼重要,因爲在爲單個用戶故事開發代碼的過程中,我可以專注於少量測試,並讓我的CI服務器運行所有測試(然後更多的時間),當我認爲我完成了。