我见过很多类似的帖子,但没有一个能真正解决我的特殊情况。
我正在 ASP.NET 4.0 Web 应用程序(ASP.NET Forms,而不是 MVC)中编写单元测试。代码中有几个地方我称之为ServerVariables
调用变量的集合,例如REMOTE_ADDR
。由于我的单元测试实际上并未启动HttpRequests
执行我的代码时,比如ServerVariables
are Null
因此当我尝试调用时出错HttpContext.Current.Request.ServerVariables("REMOTE_ADDR")
我发现解决这个问题的所有解决方案都参考 MVC,因此他们假设HttpRequest
源自于HttpRequestBase
,它在 MVC 中执行,但在 ASP.NET Forms 中则不然。
我尝试使用Moq
但你不能嘲笑密封类,并且HttpRequest
不幸的是,它是密封的,没有接口。
The HttpRequestBase http://msdn.microsoft.com/en-us/library/system.web.httprequestbase.aspx and HttpRequestWrapper http://msdn.microsoft.com/en-us/library/system.web.httprequestwrapper.aspx只需做一些工作就可以使用类。
无论您当前在何处访问HttpContext.Current.Request
——或者只是简单的Page.Request
-- 你需要使用一个可注入的实例HttpRequestBase
反而。然后你需要注入一个不同的子类HttpRequestBase
取决于您是在测试还是在现场。
-
对于实时代码,您可能会注入HttpRequestWrapper
包装的实例HttpContext.Current.Request
:
var liveRequest = new HttpRequestWrapper(HttpContext.Current.Request);
对于测试代码,您需要创建并注入您自己的模拟子类HttpRequestBase
。想必 Moq 可以即时为您做到这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)