有關數據庫單元測試的幾個常見問題
何為單元測試?
如果你對單元測試還不太了解, 可以看看中文維基百科的詞條 http://zh.wikipedia.org/zh-cn/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95
何為數據庫單元測試?
如果你對數據庫單元測試還不太了解, 可以看看下面英文網站 http://www.agiledata.org/essays/databaseTesting.html
數據庫單元測試的范圍是什么?
1.數據庫中的所有程序, 這包括存儲過程/存儲函數, 視圖等, 對于Oracle, 還有package這個概念.
2.數據庫中的一些數據, 比如控制表, 數據字典表
3.其他情形(這一點是廢話, 你可能在很多法律條文中, 經常看到它)
由誰來做數據庫代碼單元測試?
和一般的單元測試一樣, 應由數據庫代碼的開發者做.
為什么要做數據庫的單元測試?
如果你認為有必要對C#, Java代碼做單元測試, 那么你就應該想到也需要對數據庫代碼做單元測試,. 具體講:
1. 錯誤越早發現,修復的代價越小, 這一點, 我想做所有軟件同學都有同感吧. 單元測試可能是最早能幫你找到defect的環節了.
2. 單元測試提供了一種結構化的回歸測試方式, 尤其是對不斷演進的系統, 回歸測試好處多多, 很多時候, 你可以通過回歸測試, 發現新改動對原有功能造成了影響.
3. 如果你采用測試驅動開發TDD來做項目, 那單元測試工具是比不可少的. 至于何為測試驅動開發, 請參考維基百科(http://zh.wikipedia.org/zh-cn/%E6%B5%8B%E8%AF%95%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91) 或者(http://www.agiledata.org/essays/tdd.html)
4. 如果你的team要做Continuous Integration, 單元測試工具也是比不可少的.
有了Mock框架, 數據庫單元測試還需要嗎?
要回答這個問題, 你需要清楚為什么引入Mock的原因是什么. 如果你要測試一段包含數據庫邏輯的C#代碼, 你完全可以使用Mock來做模擬數據庫邏輯, 而且, 我認為, 這是一個值得推薦的做法, 原因: 一來, 你的目標是測試C#的邏輯, 而不是相關的數據庫代碼, 理所當然, 應該假設數據庫代碼是正確的, 但事實上, 數據庫代碼不一定是正確的, 因此, 你需要一個數據庫代碼的替身. 二來, 一旦包含了數據庫代碼的測試, 情況將變得很復雜, 也許你不得不處理, 如何初始化數據庫的數據, 在測試之后, 如何恢復數據庫的狀態.
稍等, 這時候數據庫代碼的測試還沒有被cover到, 你就需要一個專門的數據庫單元測試工具了.
一個數據庫單元測試工具應該具備的功能?
1. 很多時候, 要測試一個邏輯, 你需要在數據庫中初始化一些基礎數據, 單元測試軟件應該能讓我們很方便地準備這些基礎數據.
2. 前一點算是setup吧, 在做完測試工作后, 可能還需要有一個teardown過程, 所以這個也是必須的.
3. 因為你可能需要對一個數據庫代碼做多次單元測試, 所以, 單元測試最好可以工作在一個Sand Box中.
4. 它支持的測試用例應該是declarative, 而不是imperative

浙公網安備 33010602011771號