我剛開始使用單元測試,不知道被我的數據庫,使您的實際變化如何單元測試方法。最好的辦法是將它們放入交易中然後回滾,還是有更好的方法呢?
回答
如果你想正確的測試覆蓋率,則需要兩種類型的測試:
單元測試該嘲笑你所有的實際數據的訪問。這些測試將不會acually寫入數據庫,但測試確實類的行爲(這對其他依賴調用哪個方法等)
系統測試(或集成測試)的檢查你的數據庫可以被訪問和修改。我會在這裏考慮兩種類型的測試:針對每個模型對象的簡單普通CRUD測試(創建/讀取/更新/刪除),以及針對您的實際方法的更復雜的系統測試以及您認爲有趣或有價值的測試。好的做法是讓每個測試都從一個空的(或「準備好測試」)數據庫開始,做好自己的工作,然後檢查數據庫的狀態。事務/回滾是實現這一目標的好方法。
一般的方法是有一種方法來模擬你的數據庫操作。以便您的單元測試不依賴於數據庫可用或處於特定狀態。也就是說,它也意味着設計有助於模擬您的數據層所需的隔離。單元測試和如何做得好是一個巨大的話題。看看谷歌Mock框架,並依賴注入一開始。
如果你想測試一個真正的數據庫,這將是更多的集成,然後單元測試。在交易中包裝測試可能是讓數據庫保持一致狀態的一個想法。 我們已經在基類中完成了這個工作,並且使用了TestInitialize和TestCleanup函數來確保總是發生這種情況。
但是,對真實數據庫進行測試肯定會使您遇到性能問題。因此,請確保從一開始就可以將數據庫訪問代碼與內存中運行的某些內容交換。我現在不知道哪個數據庫訪問代碼是您的目標,但設計模式如UnitOfWork和Repository可以幫助您隔離數據庫代碼並將其替換爲內存解決方案。
如果您未開發O/R映射器,則無需測試數據庫代碼。你不想測試ADO.NET方法,對吧?相反,您需要驗證是否使用正確的值調用了ADO.NET方法。
搜索Google存儲庫模式。您將使用CRUD方法創建一個實現IRepository
接口並測試/模擬它。
對於單元測試,您需要模擬或存根數據訪問代碼,大多數情況下您擁有存儲庫接口,並且可以通過創建將數據存儲在內存中的具體存儲庫來存根,或者可以使用動態模擬框架來嘲笑它。
對於系統或集成測試,您需要在每個測試方法之前重新創建整個數據庫,以便在每次測試之前保持穩定的狀態。
根據以前的一些答案,如果你想測試你的數據訪問代碼,那麼你可能想要考慮模擬和系統/集成測試策略。但是,如果你想單元測試你的SQL對象(例如sprocs,視圖,表等中的約束) - 那麼有一些數據庫單元測試框架可能是有趣的(包括我有的書面)。
一些實施代碼中的SQL內測試,他人和使用MbUnit的/ NUnit的等
我已經寫了我如何處理一些與實例篇這一點 - 看到http://dbtestunit.wordpress.com/
其他可能的資源是使用:
- 1. 單元測試現有的代碼庫
- 2. 單元測試數據庫
- 3. 「單元」測試數據庫
- 4. 單元測試數據庫
- 5. 單元測試沒有實時數據庫的activejdbc代碼
- 6. 單元測試 - 數據庫數據
- 7. 單元測試ASP.NET代碼
- 8. 單元測試代碼。ContinueWith(
- 9. Zend的單元測試與數據庫
- 10. 數據庫單元測試(MySQL的)
- 11. 數據庫查詢的單元測試
- 12. 單元測試數學代碼
- 13. 單元測試中的單步測試和調試代碼
- 14. Visual Studio 2010單元測試數據庫
- 15. 單元測試MySQL數據庫交互
- 16. 單元測試數據庫訪問層
- 17. 如何單元測試數據庫類
- 18. 單元測試數據庫交互器
- 19. 單元測試涉及數據庫
- 20. 單元測試和數據庫
- 21. Clojure數據庫單元測試/嘲諷
- 22. django單元測試多個數據庫
- 23. 與數據庫交互但不在數據庫中創建數據的單元測試代碼
- 24. 創建測試數據庫Django的單元測試
- 25. Jacoco覆蓋的單元測試代碼
- 26. 單元測試閃存的AS3代碼
- 27. 使用Modernizr的單元測試代碼
- 28. 單元測試fgets()的PHP代碼
- 29. 代碼訪問ActiveDirectory的單元測試
- 30. Azure的單元測試代碼
請訪問http:/ /stackoverflow.com/questions/2472928/unit-test-insert-update-delete –
看看我的答案在這裏類似的問題http://stackoverflow.com/questions/7786750/unit-testing-database-methods/7803108# 7803108 – Chaitanya