解决 ASP.NET MVC 单元测试的基类初始化中的 HttpContext.Current 模拟问题
单元测试 ASP.NET MVC 应用程序通常需要模拟 HttpContext.Current
来模拟用户请求和响应。 当测试类继承自在初始化中使用 HttpContext.Current
的基类时,会出现一个常见问题。 仅仅模拟控制器本身的上下文是不够的。
提供的示例演示了使用 HttpContext
和 FakeControllerContext
模拟控制器的 SetFakeControllerContext
。但是,如果基类的 Init
方法访问 HttpContext.Current
,则需要直接解决此问题。 为了确保一致的模拟,我们还必须在测试的初始化中模拟 HttpContext.Current
。
嘲笑HttpContext.Current
有效
我们可以通过替换 System.Web.HttpContext
和 IPrincipal
属性来有效地模拟 IIdentity
类。 以下代码片段说明了这一点:
<code class="language-csharp">HttpContext.Current = new HttpContext( new HttpRequest("", "http://tempuri.org", ""), new HttpResponse(new StringWriter()) ); // Simulate a logged-in user HttpContext.Current.User = new GenericPrincipal( new GenericIdentity("username"), new string[0] ); // Simulate a logged-out user HttpContext.Current.User = new GenericPrincipal( new GenericIdentity(String.Empty), new string[0] );</code>
通过在测试的初始化方法中实现此模拟策略,在调用基类的 Init
方法之前,我们确保 HttpContext.Current
被正确模拟,从而允许测试准确地模拟用户交互并根据需要访问 HttpContext
。 这种方法保证了测试执行期间控制器和基类的行为一致。
以上是如何在 ASP.NET MVC 单元测试的基类初始化中模拟 HttpContext.Current?的详细内容。更多信息请关注PHP中文网其他相关文章!