2011-12-05 50 views
0

我正在考慮扔掉我下一個項目中的所有存儲庫類,並直接在我的服務類中使用ISession。原因在於我的存儲庫類只是傾向於將調用轉發給ORM(即沒有真正的邏輯)。nhibernate測試策略

這個最大的缺點是,它使得單元測試更加努力,如果有任何其他的方法來測試我的服務,而一個數據庫中,我不知道(沒有在內存數據庫SQLite的一樣,請)?嘲笑ISession是個壞主意嗎?

或者我應該堅持使用瘦存儲庫類嗎?

+0

我不明白'沒有數據庫'的要求;假設你在服務類中有類似的東西:'Session.Query 。Where(u => u.Domain = domain)'。你不想測試這個查詢來看它是否產生了正確的SQL和正確的結果嗎?你會怎麼做? –

+0

@sJhonny:集成測試,而不是單元測試。 – jgauffin

回答

0

它可能看起來很容易嘲笑ISession,但我發現很難做一個適當的模擬。特別是如果使用LINQ擴展方法。

我會堅持存儲庫。理解存儲庫方法的預期要比通用接口(如ISession)更容易理解。

0

它是一個壞主意,嘲笑的Isession?

不,這不是一個壞主意。如果你的服務類依賴於ISession,那麼你可以做些什麼來測試你的服務類。雖然有一個設計的氣味,因爲你的服務類依賴NHibernate,但我想你可以忍受。

+0

請詳細說明爲什麼ORM依賴是一種設計氣味? (它們不是WCF服務類) – jgauffin

+0

@jgauffin,這是因爲服務層應該是ORM不可知的。它是特定於某個數據庫或ORM(如果使用任何)的DAL層。如果將來您決定更改數據訪問策略或ORM,則不需要修改服務層。但如果這是你不打算的東西,正如我所說的,你可以在你的服務層中使用ISession。 –

+0

@jgauffin,在理想的世界中,您想要分離所有可能具有特定於某個ORM提供程序的DAL層的DAL層,該層提供程序實現您的存儲庫接口,從而在模型上提供簡單的原子操作,然後服務層將這些存儲庫接口作爲構造函數參數。 –