繁体   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