2011-04-25 82 views
16

我试图做一些测试与城堡windsor参与,在我的一个测试中,我想检查windsor安装程序,所以我检查容器可以解析我的组件接口。测试城堡windsor组件与PerWebRequest的生活方式

到目前为止,问题开始于组件在其安装程序中具有PerWebRequest生活方式时,首先它抱怨HttpContext.Current为null,解决了在测试设置中创建假上下文我现在正在此异常NUnit测试

的System.Exception:您似乎忘记注册HTTP模块Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule 增加“”一节对你的web.config。如果你在集成模式下运行IIS7,你需要将它添加到

这个部分当我从NUnit运行这个时,我如何在Windsor中注册模块或类,以便它可以工作,或者如何可以被模拟,因为在这个测试中不是一个真正的Web请求,只是检查容器解析类型。

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

Tranks提前

费尔

+1

我昨天问过类似的问题在http://stackoverflow.com/questions/5772497/how-can-i-unit-test-my-controller-to-make-sure-windsor-can-resolve-dependencies-w – KallDrexx 2011-04-25 19:21:53

回答

16

在您的测试,你可以订阅ComponentModelCreated事件,改变你的每个Web请求部件的生活方式别的东西。 (example)。

如果你正在写一个单一请求范围的集成测试,单身人士应该这样做。

如果您正在编写跨多个请求的集成测试,则可以使用contextual lifestyle来模拟请求的范围。

编辑:包括示例代码(这是不再可用):

container.Kernel.ComponentModelCreated += Kernel_ComponentModelCreated; 

...

void Kernel_ComponentModelCreated(Castle.Core.ComponentModel model) 
{ 
    if (model.LifestyleType == LifestyleType.Undefined) 
     model.LifestyleType = LifestyleType.Transient; 
} 
+1

Mauricio,非常感谢您的回答,我用这个抓了我的头而。一种新的与温莎。 – 2011-04-25 19:37:36

+0

我也是Mauricio - 谢谢你! – JanivZ 2014-03-07 10:58:01

+0

感谢您的想法。需要根据预期对覆盖功能进行单元测试。通过两次解析相同的IType并检查对象是否相同来完成LifestyleSingleton。 – 2014-10-22 07:37:23

相关问题