2013-12-21 147 views
2

測試數據訪問層在一個典型的3層結構的應用程序,則有:單元在3層架構

  • 業務邏輯層
  • 數據訪問層
  • 數據存儲層

我想測試不使用真實的DB中DAL(尤其是一個與實體框架)。但是在DB中模擬複雜的外鍵約束有點困難。還有很多其他的東西。

我現在想,如果這是單元測試的正確方法的DAL?或者哪一層最適合單元測試?

我看到一些文章trying to mock the DbContext in the Entity Framework。用這種方法模擬外鍵關係似乎很困難。我想知道是否縫的正確位置。我們可以嘲笑別的地方嗎?比如嘲笑ADO.NET層? 即ADO.NET消耗的內存模擬數據庫。

Mocking somewhere else

回答

2

懲戒數據庫的東西是出了名難,費時和繁瑣。因此,一個更實際的方法是建立一個測試數據庫,讓你的測試運行反對,並測試相結合的整個持久性的東西 - 這不正是單元測試,但更實用......

順便說一句得到:典型的3層結構是:

  1. 表示層
  2. 業務邏輯層
  3. 持久層(其中一部分是數據存儲系統 - 主要是數據庫)
3

托馬斯的答案提供了測試數據訪問層的好方法。但它沒有提供一種方法來取代它。

的更合理方法以3層結構是防止業務邏輯層從直接對話在數據訪問層的類。跨層通信應該通過您定義的接口完成。數據訪問層可以知道業務邏輯層,但業務邏輯層應該只知道數據訪問接口,而不關心接口是如何實現的。

然後你就可以替換假數據訪問真正的數據訪問。見鮑勃叔叔的談話Architecture: The Lost Years

+0

我同意。如果你真的想'嘲笑'DAL,那就是要走的路。 –