使用PerWebRequest生活方式测试Castle windsor组件

Fer*_*las 17 testing components castle-windsor castle perwebrequest

我试图对城堡windsor进行一些测试,在我的一个测试中我想检查windsor安装程序,所以我检查容器可以解析我的组件给定其界面.

到目前为止,这么好,问题开始时组件在其安装程序中具有PerWebRequest生活方式,起初它抱怨HttpContext.Current为null,有一个解决了在测试设置中创建假上下文我现在在nunit中有这个异常测试

System.Exception:看起来你忘记注册http模块Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule在你的web.config部分添加''.如果您在集成模式下运行IIS7,则需要将其添加到下面的部分

当我从NUnit运行它时,我如何在windsor中注册模块或类,以便它可以工作,或者如何模拟,因为在此测试中并不是真正的Web请求,只需检查容器是否解析了类型.

如果我在真正的webrequest之外使用这个组件进行任何集成测试,也有同样的事情会发生,有没有办法让这个工作或真的模拟一个Web请求,这样这个测试可以运行?

Tranks提前

费尔

Mau*_*fer 18

在您的测试中,您可以订阅ComponentModelCreated事件,并将每个Web请求组件的生活方式更改为其他内容.(例子).

如果您正在编写具有单个请求范围的集成测试,则单例应该这样做.

如果您正在编写跨越多个请求的集成测试,则可以使用上下文生活方式来模拟请求的范围.

编辑:包括示例中的代码(不再可用):

container.Kernel.ComponentModelCreated += Kernel_ComponentModelCreated;
Run Code Online (Sandbox Code Playgroud)

...

void Kernel_ComponentModelCreated(Castle.Core.ComponentModel model)
{
    if (model.LifestyleType == LifestyleType.Undefined)
        model.LifestyleType = LifestyleType.Transient;
}
Run Code Online (Sandbox Code Playgroud)

  • 毛里西奥,非常感谢你的回答,我已经用这个问题抓了一会儿.温莎的新品种. (2认同)
  • 它有效,但我必须检查生活方式 PerWebRequest 而不是 Undefined。也许自从您的答案多年前发布以来,行为发生了变化。所以条件变成:if (model.LifestyleType == Castle.Core.LifestyleType.PerWebRequest)。谢谢 ! (2认同)