2008-11-19 46 views
0

我對單元測試相當陌生。我有一個建在三層架構中的網站,UI - > BLL - > DAL。並且我使用了asp.net提供者模型,所以通過對web.config進行更改,我可以切換到DAL dll來定位不同的數據源,以完成DAL使用實體框架編寫。如何將測試集成到使用ASP.NET提供程序模型編寫的代碼中?

現在,我的問題是如何單元測試我的BLL?我使用NUnit。

如果運行/調試我的網站,asp.net/IIS加載所有內容,並從web.config中獲取正確的配置,所以事情有效,這是因爲入口點來自IIS。現在,如果我使用NUnit gui來測試並說我有我的BLL的測試用例的測試項目「MySite.Test.dll」,測試框架如何獲得正確的配置以成功運行所有測試。它需要web.config中的信息來加載正確的提供者!

現在,在我的DAL中有一個由EntityFramework在那裏創建的App.config,其中只有connectionString。我應該把所有提供者相關的配置放在這個app.config中嗎?或者我錯過了關於如何正確地做到這一點的一些大圖片?

這應該是我認爲人們需要不斷努力的常見事情。有人可以給我一些細節,如何單元測試我的庫。

謝謝, 雷。


編輯:在閱讀前2個答案後,我想我應該糾正我的描述與集成測試。基本上不用IIS作爲入口點,使用像NUnit這樣的GUI工具來運行和測試我的代碼,所以NUnit - > BLL - > DAL。人們如何設置它?

謝謝, 雷。

回答

1

看起來像你正在嘗試做的 - 是集成測試... 單元測試,根據定義,測試單純的舊.Net類孤立。沒有數據庫,沒有配置......所以......就我所見,要做適當的單元測試,你需要將BLL重構爲服務層和域邏輯類,你將單獨測試它們。像:服務層使用域邏輯類,你的單元測試使用它們。所以,域類不會去數據庫,你不需要連接字符串和一切。

但是,如果您想對數據庫進行適當的集成測試,您可能也想這樣做。如果這是你所需要的 - 谷歌它,在nunit.config中得到一些配置字符串並不難 - 我不知道細節。

不過,我覺得你想要做的是單元測試,而不是集成測試..

問問自己,究竟是什麼我想測試? 單元測試不測試「一切」。重構,顛倒依賴關係,並嘗試單獨測試業務邏輯。

0

根據您希望從DAL分離的方式,您有幾個不同的選項。如果您想將DAL引入測試中,則可以將app.config文件的連接字符串部分複製到單元測試項目中的app.config文件中。正如@badbadboy所說,雖然這確實是集成測試,而不是單元測試。

如果你想做適當的單元測試,你可能想使用依賴注入和接口來讓你從BLL中嘲笑DAL。我使用LINQ到SQL,因此我所做的是圍繞DataContext創建接口和包裝類。這使我可以創建一個模擬數據庫用於單元測試,以獨立地測試我的實體類。

單獨測試您的實體類將使您的測試更加脆弱,並允許您爲每個測試獨立設置數據。這使得它更容易維護。

你也可能想看看一個模擬框架,這將使它幾乎微不足道的生成模擬對象。我在Rhino Mocks上取得了相當不錯的成績,但也有其他人。

1

而不是您的單元測試項目中的「web.config」文件,您需要一個「MySite.Test.dll.config」文件,而不是您可以輸入測試的正確配置。請注意,如果需要,使用此方法可以使用其他提供程序連接到內存數據庫。

相關問題