簡體   English   中英

數據測試層的單元測試

[英]Unit Testing a Data Access Layer

我知道這個問題已經被問過很多次了,但是我仍然沒有找到一個好的答案,我對此問題的看法略有不同。

我正在尋找一種徹底測試數據訪問層的好方法,但是如果可能的話,可以進行原子測試。 我不想使用真實的數據庫(或克隆),因為這將是一個集成測試,並且我希望我的測試保持盡可能輕巧和簡單。

DAL是使用NHibernate實現的,而DB是Microsoft SQL Server。 不幸的是,某些DAO必須使用普通的ADO.Net來實現。 甚至更糟的是,某些DAO必須是存儲過程的包裝。

基本上,我要測試的是NHibernate映射有意義,並且DAO從根本上起作用。 我想根據我的NHibernate映射在內存中創建一個數據庫,模擬所有必需的存儲過程,然后圍繞該數據庫運行我的單元測試。 使用我正在測試的DAO從內存數據庫中的“模擬”插入和查詢。

我的問題如下:

  1. 這是一個好方法嗎?
  2. 是否有人有這種方法的經驗並可以分享見解?
  3. 是否有一些框架或庫可以幫助我創建內存中的模擬數據庫?
  4. 如何建立這些測試以用於基於NHibernate的Dao和基於ADO.Net的Dao?
  5. 如何為存儲過程創建模擬?

圍繞DAO進行測試總是很棘手,但是如果您在這一層中有邏輯,那么它絕對是單元測試的理想選擇。

過去我發現使用內存數據庫進行這種類型的測試非常有效-涉及一定數量的設置成本(即,在測試中配置您自己的數據庫模式的連接和部署)但是一旦完成,他們往往會表現得很好。 SQLite看起來可能是一個不錯的選擇,看起來與NHibernate一起使用非常簡單,並且還有一個ADO.netSQLite提供程序

對於您的問題, SQLite一個問題是它不支持存儲過程。 我認為,這里最好的選擇是創建單獨的類來封裝存儲過程調用,並將這些類型的對象依賴注入到DAO中。 這樣,您可以使用標准對象模擬來模擬存儲過程調用。

最后一點-如果您的應用程序中確實有包含任何非平凡邏輯的存儲過程,那么圍繞它們進行一些集成測試可能是值得的(也許每個存儲proc進行一個測試,該測試將對DAO和部署在生產環境中的proc進行練習)數據庫)。 盡管創建和維護它們有些痛苦,但我發現它們在過去非常值得-由於開發人員很少充分測試存儲proc更改,因此對存儲過程的更改通常是bug的來源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM