2012-01-20 106 views
1

我有NHibernate基於(構造函數ISessionFactory注入)存儲在DAL內的通用存儲庫實現。它實現了存儲在「域層」中的契約。單元測試存儲庫。 NHibernate

我應該測試實際存儲庫行爲使用SQl CE或者我應該修改我的應用程序支持不可知類(像蒂姆Maccharty的書http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470147563,descCd-authorInfo.htmlUnit of Work,然後給我的假執行IUnitOfWorkRepository

在本地數據庫上運行測試暴露真實資源庫實現的有效方法嗎?

謝謝!

+1

檢查ayendes博客單元測試nhibernate – blindmeis

+0

@blindmeis謝謝!這是一篇很棒的文章。 – lexeme

回答

3

這個問題是你正在測試和爲什麼。這將回答這個問題。

如果:

我想測試一個第三方工具

也就是說,你如果NHibernate的工作測試(不是一種測試 的我)。然後做任何需要的事情,所以不需要重構。失去你自己。

我想測試我的代碼如何與THRID第三方工具

然後你在說什麼,我喜歡稱之爲交互測試交互。重構是必需的,因爲你對如何使用NHiberate比如果它的工作更感興趣。

我想測試我的代碼

抽象NHibernate的全部。做任何必要的包裝?你現在回到單元測試。

我想但從

用戶角度,我認爲這是上述範圍內的談話測試我的應用程序。但是你可以使用這個範圍來談論組件。所以......嗯......值得但不容易。不是單元測試,因此您想要實例化組件/應用程序並按照其'用戶'運行整個事情。我稱這些'UAT'爲通常實現的'編碼UAT'。

+0

我在倉庫中沒有嵌入式驗證邏輯。所以這是真的,我需要測試代碼和工具之間的交互。謝謝! – lexeme

2

單元測試正在單獨測試一個單元。所以,不,如果你要去數據庫,那甚至不是單元測試。 抽象掉和測試你的存儲庫與嘲弄的接口。

1

我認爲要測試您需要使用實際場景的存儲庫。否則,您沒有其他地方可以測試數據庫訪問權限。嘲笑倉庫不是一個好習慣。因爲您沒有任何需要在存儲庫中測試的邏輯。我認爲你需要編寫集成測試來調用實際庫來從中受益。

+0

測試,是的。您應該針對實時數據庫運行集成測試。但是,這個問題是關於單元測試的。當然,使用數據庫不是單獨測試? –

+0

您是否認爲有任何使用存儲庫的測試方法調用。因爲我不認爲存儲庫有任何需要測試的邏輯。 –

+1

這真的很難。沒有很多邏輯,這是真的。但是,從數據庫讀取和寫入時可能會發生一些處理和驗證/驗證。以及解析事物並設置所有對象。 所以,你不需要單元測試。但是,如果你想要安全性,那麼最好的做法是抽象並用模擬界面進行測試。 –