2011-02-16 237 views
3

當我僅限於EF 3.5實體時編寫單元測試的最佳方式是什麼?測試實體框架3.5

+0

你想要單元測試什麼?你能提供更多的信息,說明你正在嘗試做什麼或有什麼問題? – Jeff 2011-02-16 14:43:04

回答

0

如果你想自己單元測試你的查詢,我強烈推薦你設置一個測試數據庫並用真實數據測試它們。使用IObjectSet<T>爲了替代內存中的集合以便單元測試運行是一個糟糕的想法。在linq-to-objects之下運行linq查詢的方式,以及如何將其解析爲T-SQL命令,即如何處理空值之間存在差異。例如,

db.People.Where(p => p.AccountNum == variable); 

如果這是使用LINQ到對象(如你的埋入在爲IObjectSet<T>的單元測試的替代設置一些內存對象),然後將完美運行。然而,如果你正在運行的是針對數據庫,那麼如果變量爲空,您的查詢將打破,因爲

WHERE [peopleTableAlias].[AccountNum] = @param1 

查詢,將會產生與@參數1是空,這將是毫無價值的,因爲你真的需要生成一個IS NULL查詢。


然而,如果你想測試你的業務邏輯,它調用你的EF DataContext的,那麼我會說包裹起來這些查詢到數據訪問對象,標記你的方法是虛擬的,注射稱需要它們的地方的DAO ,在你的單元測試中,用手動模擬替代那些方法來爲測試返回所需的值,或者用你最喜歡的模擬框架(即Rhino)做同樣的事情。

EDIT - 對不起,IObjectSet<T>僅限於EF4,顯然你沒有。但由於使用該單元測試是我推薦的而不是,所以答案仍然適用。

+0

我要測試的課程是DAL。所以建立一個測試分貝似乎是正確的路要走。你有沒有關於使用測試數據庫或我需要注意的任何好的提示? – Ols1 2011-02-16 16:07:17