gpt4 book ai didi

c# - 我如何对 Windsor 可以解析 Asp.net MVC3 Controller 依赖项进行单元测试?

转载 作者:太空狗 更新时间:2023-10-30 01:10:01 25 4
gpt4 key购买 nike

目前我的 Windsor Controller 工厂运作良好。但是,我正在稍微更改我的 Controller 并让 Windsor 为 Controller 实例化更多数据。我忘记更新我的 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 依赖配置有什么建议吗?

最佳答案

您正在您的设置中创建一个新的 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 (),它也在内部处理转换。

关于c# - 我如何对 Windsor 可以解析 Asp.net MVC3 Controller 依赖项进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5601679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com