首页 >后端开发 >C++ >如何模拟 HttpContext.Current 进行有效的 ASP.NET MVC 单元测试?

如何模拟 HttpContext.Current 进行有效的 ASP.NET MVC 单元测试?

Barbara Streisand
Barbara Streisand原创
2025-01-17 03:01:09322浏览

How Can I Mock HttpContext.Current for Effective ASP.NET MVC Unit Testing?

在单元测试中模拟 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn