2012-05-21 17 views
0

我正在使用NHibernate 3的項目,但代碼非常混亂。我想這樣做的是:使用NHibernate和Repository模式 - 如何處理模擬上下文和篩選表達式

  • 引入測試代碼到項目
  • 介紹Repository模式 - 我做到了與實體框架的4個項目,我很喜歡它,尤其是機會測試查詢無論存儲的使用(我可以嘲笑內部存儲並注入內存中的對象列表)
  • 由於目前的DAO代碼與CreateCriteria方法一起工作,並創建特定於NHibernate的查詢,所以不可能用另一個(或至少是I不知道如何在List實例上執行NHibernate.ICriteria,所以我需要一種方法來創建可以使用的查詢,而不管存儲實現通貨膨脹。

有什麼辦法可以實現它嗎?

回答

0

這可能不是你正在尋找的。我們有兩種測試:單元測試,它測試沒有數據庫和數據庫集成測試的純邏輯。

單元測試

我們要實現查詢類的接口。這樣,域沒有任何對NHibernate的引用。在你的情況下,這可能是存儲庫。寫簡單和小的接口,並模擬整個存儲庫。你甚至不需要NHibernate。這就是persistence ignorance的美麗。

數據庫集成測試

我們現在正Sqlite database這是in memory運行NHibernate的。這樣我們就可以測試映射,查詢和其他依賴於NHibernate的東西。

+0

它與單元測試有關。你寫的是嘲笑庫存調用的結果 - 例如FindByCity('Chicago')返回10個城市。然而,我想要實現的是測試複雜查詢是否被正確處理。例如FindBy(新的QueryByCity('Chicago'))返回10個城市 - 爲了檢查正確實現的查詢是否想要模擬內部上下文/內存中的存儲返回,例如20個城市,並且存儲庫將應用查詢並返回實際上與查詢匹配的城市。 – dragonfly

+1

嗯,實際上,在您再次閱讀之後,您會回答,似乎我正在做的是數據庫集成測試。是對的嗎? – dragonfly

+0

@dragonfly:是的,這將是一個數據庫集成測試。它需要整個事情:數據庫,NH,數據,但它也適用於任何類型的查詢,甚至(標準)SQL。 –