如何在 FakeHttpContext 中设置 Request.Header 进行单元测试

2024-04-21

我有一个假HttpContext我一直在尝试修改以包含一些用于测试目的的标头

public static HttpContext FakeHttpContext()
{
    var httpRequest = new HttpRequest("", "http://stackoverflow/", "");
    var stringWriter = new StringWriter();
    var httpResponse = new HttpResponse(stringWriter);
    var httpContext = new HttpContext(httpRequest, httpResponse);   

    var sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollection(),
                                                    new HttpStaticObjectsCollection(), 10, true,
                                                    HttpCookieMode.AutoDetect,
                                                    SessionStateMode.InProc, false);

    httpContext.Items["AspSession"] = typeof(HttpSessionState).GetConstructor(
                                        BindingFlags.NonPublic | BindingFlags.Instance,
                                        null, CallingConventions.Standard,
                                        new[] { typeof(HttpSessionStateContainer) },
                                        null)
                                .Invoke(new object[] { sessionContainer });

    return httpContext;
 }

这可以在没有标题的情况下工作,但是当我在标题之间添加任何这些代码行时http请求 and 字符串编写器 lines.

    httpRequest.Headers.Add("blah", "1234");
    httpRequest.Headers["blah"] = "1234";

它抛出

发生“System.PlatformNotSupportedException”类型的异常 在 System.Web.dll 中,但未在用户代码中处理

  • 为什么我会得到这个异常?
  • 有没有可能的方法来添加标题HttpContext供测试用WebApi 控制器?

我正在使用 .Net Core 3.1 和 Moq 框架。我创建了一个 DefaultHttpContext,在那里设置标头,最后将其分配给控制器 ControllerContext 构造函数。

var httpContext = new DefaultHttpContext();
httpContext.Request.Headers["X-Example"] = "test-header";
var controller = new ExampleController(mockClient.Object, mockLogger.Object) 
{ 
    ControllerContext = new ControllerContext()
    {
        HttpContext = httpContext
    }
};

Source: https://www.thecodebuzz.com/unit-test-mock-httprequest-in-asp-net-core-controller/ https://www.thecodebuzz.com/unit-test-mock-httprequest-in-asp-net-core-controller/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 FakeHttpContext 中设置 Request.Header 进行单元测试 的相关文章

随机推荐