2011-01-09 65 views
1

我試圖單元測試我的數據訪問層,我正在試圖嘲笑我的數據連接到單元測試我的DAL的過程,我會試圖模擬創建命令。我想過使用一個IDbParameters隊列來創建參數,但是單元測試需要參數按照正確的順序進行配置。我正在使用最小起訂量並查找了一些文檔來引導我完成此操作,我發現很多建議不要這樣做,而是爲連接編寫一個包裝器,但是我認爲我的DAL應該是我的數據庫的包裝,我不覺得我應該寫包裝...如果我這樣做,我如何單元測試連接到我的包裝數據庫?通過寫另一個包裝?它似乎是一直在下降的烏龜。我應該如何嘲笑我的數據連接

那麼,有沒有人有任何關於單元測試/嘲笑這個特定領域的建議或教程?

+0

看看這篇文章:http://bit.ly/bF7jL3。 – Steven 2011-01-10 15:49:41

回答

2

我已經成功交換了內存數據庫。這使您有機會設置並輕鬆拆卸它。您也可以模擬連接調用,以便可以斷言傳入的參數,然後返回內存數據庫。

+0

使用類似sqlite的東西:) – 2011-01-10 15:54:25

0

Moq使用繼承來創建一個模擬類 - 這種方法的缺點是,你試圖僞造的類應該作爲接口傳遞,至少不會是密封類。一種解決方案是圍繞「un-mockable」類創建一個包裝類,然後模擬該類,不幸的是,這個解決方案需要相當多的維護。

如果你願意支付一個模擬框架來讓你模擬密封類,那麼考慮購買Typemock Isolator或者JustMock--它們都可以模擬任何.NET類和方法(包括密封類和靜態方法)。

0

我建議不要使用模擬這種類型的測試。我用Java走下了這條道路,它總是以我感覺我已經證明很少,除了我可以寫出嘲諷的語句。我會建議使用內存數據庫或每個開發者數據庫,並接受一些東西是集成測試。

我很喜歡這個方法,我很喜歡這種方法,我很喜歡這個方法。

包裝只是提供了一個IDatabase接口和一堆方法,如DataTable ExecuteFunction(...),它們提供了一種簡單的方法來調用oracle函數或過程。這個API的客戶端看到的唯一一個來自System.Data的類是DataTable。包裝器處理與IDbParameter有關的所有問題。包裝只有集成測試。

單元測試實際的DAL非常簡單,再加上編寫DAL可以獲得更好的效果。不太可怕的樣板來處理。

爭我DAL應該是我的數據庫

的DAL提供訪問保存在數據庫中的業務功能的包裝。數據庫包裝器剝離鍋爐板代碼(並允許您模擬它)。

如果我這樣做,我該如何單元測試連接到我的包裝數據庫?

不要。接受一些事情是集成測試。