2011-04-08 28 views
4

目前我有溫莎控制器工廠,運作良好。然而,我正在改變我的控制器,讓溫莎爲控制器實例化更多數據。我忘了更新我的安裝程序類,它失敗了。因此,我意識到這是單元測試的完美實例,所以每次運行我的單元測試時都會驗證Windsor的設置是否正確。如何才能單元測試Windsor可以解決Asp.net MVC3控制器依賴關係?

因此,我創建了以下的單元測試:

[TestMethod] 
    public void Windsor_Can_Resolve_HomeController_Dependencies() 
    { 
     // Setup 
     WindsorContainer container = new WindsorContainer(); 

     // Act 
     HomeController controller = (HomeController)container.Kernel.Resolve(typeof(HomeController)); 
    } 

這正是存在於我的WindsorControllerFactory.GetControllerInstance()方法,所以我不知道爲什麼,這是行不通的相同的代碼。當這個運行我得到:

Test method MyApp.Tests.Controllers.HomeControllerTest.Windsor_Can_Resolve_HomeController_Dependencies threw exception: 
Castle.MicroKernel.ComponentNotFoundException: No component for supporting the service MyApp.Controllers.HomeController was found 

我不知道如何解決這個問題。我唯一能想到的是,因爲它在我的測試項目中,而不是我的Asp.net MVC項目,它可能不會自動提取我的CommandAndQueryInstaller類,其中包含我所有的windsor類型註冊。

單元測試windsor依賴配置的任何建議?

+0

如果您使用'PerWebResquestLifeStyle',問題提問者會問這個問題:http://stackoverflow.com/q/5772497/114029確保您檢查了它。 – 2012-11-03 21:17:41

回答

5

您正在創建一個新的WindsorContainer,並且不會在容器中註冊任何依賴關係。您需要運行您的IWindsorInstallers才能填充容器。

[TestMethod] 
public void Windsor_Can_Resolve_HomeController_Dependencies() 
{ 
    // Setup 
    WindsorContainer container = new WindsorContainer(); 
    container.Install(FromAssembly.Containing<HomeController>()); 

    // Act 
    HomeController controller = container.Resolve<HomeController>(); 
} 

請注意,您不必訪問內核。您可以使用container.Resolve <T>(),它也在內部處理演員。

+0

啊哈,我知道我正在尋找類似的東西,我無法在我的代碼庫中找到它。謝謝! – KallDrexx 2011-04-09 00:43:25

相關問題