我如何进行单元测试,温莎可以解决Asp.net mvc控制器依赖关系

本文关键字:net Asp 解决 mvc 控制器 关系 依赖 何进行 单元测试 | 更新日期: 2023-09-27 17:49:25

目前我有温莎控制器工厂工作良好。但是,我稍微改变了一下控制器,并让Windsor为控制器实例化更多数据。我忘记更新我的安装程序类,它失败了。

因此,我意识到这是一个完美的单元测试实例,所以每次我运行单元测试时,它都会验证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类,其中包含我所有的温莎类型注册。

对温莎依赖配置的单元测试有什么建议吗?

我如何进行单元测试,温莎可以解决Asp.net mvc控制器依赖关系

你在你的设置中创建了一个新的WindsorContainer并且没有在容器中注册任何依赖项。你需要运行你的iwindsorinstaller来填充容器。

[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(),它也会在内部处理强制类型转换。