簡體   English   中英

我如何單元測試Windsor可以解決Asp.net MVC3控制器依賴?

[英]How can I unit test that Windsor can resolve Asp.net MVC3 controller dependencies?

目前我有溫莎控制器工廠,運作良好。 但是,我正在更改我的控制器並讓Windsor為控制器實例化更多數據。 我忘了更新我的Installer類,但它失敗了。

因此,我意識到這是單元測試的完美實例,所以每次運行單元測試時,它都會驗證Windsor是否設置正確。

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

    [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依賴配置的建議嗎?

您正在設置中創建一個新的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>(),它也在內部處理強制轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM