2011-04-25 58 views
16

我試圖做一些測試與城堡windsor參與,在我的一個測試中,我想檢查windsor安裝程序,所以我檢查容器可以解析我的組件接口。測試城堡windsor組件與PerWebRequest的生活方式

到目前爲止,問題開始於組件在其安裝程序中具有PerWebRequest生活方式時,首先它抱怨HttpContext.Current爲null,解決了在測試設置中創建假上下文我現在正在此異常NUnit測試

的System.Exception:您似乎忘記註冊HTTP模塊Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule 增加「」一節對你的web.config。如果你在集成模式下運行IIS7,你需要將它添加到

這個部分當我從NUnit運行這個時,我如何在Windsor中註冊模塊或類,以便它可以工作,或者如何可以被模擬,因爲在這個測試中不是一個真正的Web請求,只是檢查容器解析類型。

而且,如果我在真正的webrequest外部使用這個組件進行任何集成測試,也會發生同樣的事情,有沒有什麼方法可以使這個工作或真的模擬一個Web請求,以便這個測試可以運行?

Tranks提前

費爾

+1

我昨天問過類似的問題在http://stackoverflow.com/questions/5772497/how-can-i-unit-test-my-controller-to-make-sure-windsor-can-resolve-dependencies-w – KallDrexx 2011-04-25 19:21:53

回答

16

在您的測試,你可以訂閱ComponentModelCreated事件,改變你的每個Web請求部件的生活方式別的東西。 (example)。

如果你正在寫一個單一請求範圍的集成測試,單身人士應該這樣做。

如果您正在編寫跨多個請求的集成測試,則可以使用contextual lifestyle來模擬請求的範圍。

編輯:包括示例代碼(這是不再可用):

container.Kernel.ComponentModelCreated += Kernel_ComponentModelCreated; 

...

void Kernel_ComponentModelCreated(Castle.Core.ComponentModel model) 
{ 
    if (model.LifestyleType == LifestyleType.Undefined) 
     model.LifestyleType = LifestyleType.Transient; 
} 
+1

Mauricio,非常感謝您的回答,我用這個抓了我的頭而。一種新的與溫莎。 – 2011-04-25 19:37:36

+0

我也是Mauricio - 謝謝你! – JanivZ 2014-03-07 10:58:01

+0

感謝您的想法。需要根據預期對覆蓋功能進行單元測試。通過兩次解析相同的IType並檢查對象是否相同來完成LifestyleSingleton。 – 2014-10-22 07:37:23