2009-04-29 100 views
0

我使用代碼生成器(CodeSmith和.NetTiers模板)生成所有DAL代碼。我爲我的代碼(業務層)編寫單元測試,而且這些測試的運行速度很慢。問題是,對於每個測試,我重置數據庫以具有乾淨的狀態。另外,當我做了很多測試時,數據庫操作的延遲似乎總是有點延遲。使用生成的DAL代碼進行單元測試

所有數據庫操作都是通過由.NetTiers生成的DataRepository類執行的。你知道是否有一種方法可以生成(或編寫自己)一個可以使用內存存儲而不是使用數據庫的模擬DataRepository?

這樣,我就可以在我的單元測試中使用這個模擬存儲庫,加快它們的速度,而不用真正改變我的當前代碼!

回答

3

其他球隊看看依賴注入(DI)和控制容器的反轉(IOC)。本質上,您將創建一個新的模擬DB對象可以實現的接口,然後DI框架將在運行測試時注入您的模擬數據庫,以及運行您的應用程序時注入真實的數據庫。

有許多免費和開源的庫可以幫助你。由於您使用的是C#,所以新的DI庫之一是Ninject。還有很多其他的。看看這個Wikipedia article爲他人和一個高層次的描述。

0

我們的一些單元測試使用從XML中提取的數據,這些數據是從數據庫生成的,用於模擬數據庫訪問。 DAL類被替換爲模擬類,因爲它們都存儲在DI容器中。

xml的生成是自定義代碼,如果您發現這個開源解決方案,那麼我很高興聽到它。斯特凡的答案後

編輯:我記得使用SQL CE他們的測試數據庫

1

從問題描述中,我認爲您正在執行集成測試,因爲您的測試正在使用Business和DAL以及實時數據庫。

對於單元測試,您需要處理一層代碼,其中所有其他依賴項都是模擬或存根的。通過這種方法,您的單元測試將非常快速地執行每個增量代碼更改。

有各種模擬框架,你可以使用像犀牛模擬,Moq,typemock命名一些。 (在我的項目中,我使用Rhino模擬來模擬隔離中的DAL層和單元測試業務層)

Harsha