在单元测试中模拟 HttpContext.Current
在对 ASP.NET MVC 应用程序进行单元测试时,需要模拟 HttpContext.Current
属性调用返回的 HttpContext.Current
。此属性返回 System.Web.HttpContext
的实例,它没有扩展 System.Web.HttpContextBase
(用于模拟的类)。
HttpContext.Current 与 HttpContextBase
引入 HttpContextBase
是为了解决 HttpContext
难以模拟的问题。但是,这两个类之间没有关系,HttpContextWrapper
用作它们之间的适配器。
模拟 HttpContext 以实现共享访问
为了模拟 HttpContext
,使其在控制器和在 TestInitialize
方法中调用的任何库之间共享,可以使用以下代码:
<code class="language-csharp">HttpContext.Current = new HttpContext( new HttpRequest("", "http://tempuri.org", ""), new HttpResponse(new StringWriter()) );</code>
设置用户主体
要设置已登录用户,请使用以下代码:
<code class="language-csharp">HttpContext.Current.User = new GenericPrincipal( new GenericIdentity("username"), new string[0] );</code>
将用户设置为未登录
要模拟未经身份验证的用户,请使用:
<code class="language-csharp">HttpContext.Current.User = new GenericPrincipal( new GenericIdentity(String.Empty), new string[0] );</code>
通过这种方式修改 HttpContext.Current
,可以在整个测试设置中模拟它,确保控制器和任何依赖库的行为一致。
以上是如何模拟 HttpContext.Current 进行有效的 ASP.NET MVC 单元测试?的详细内容。更多信息请关注PHP中文网其他相关文章!