【问题标题】:Mocking HttpResponseHeaders and cookies in WebAPI在 WebAPI 中模拟 HttpResponseHeaders 和 cookie
【发布时间】:2015-12-02 14:00:34
【问题描述】:

我正在尝试为我的 web api 控制器编写一些单元测试,我需要测试一个 cookie 是否被正确检索,所以我想设置一个模拟来返回我想要测试的 cookie。在 WebAPI 中检索 Cookie 的方式如下:

Request.Headers.GetCookies("CookieName").FirstOrDefault()

请求对象是可模拟的,但不幸的是我无法模拟 headers 属性(这是一个 HttpRequestHeaders 对象),因为 HttpRequestHeaders 是密封的,它的方法都不是虚拟的,而且它也没有实现接口(很好工作女士)。

有没有办法模拟 WebAPI 中 cookie 的获取/设置?

附言我不想听到我不应该在 WebAPI 中使用 cookie,这就是正在做的事情,改变它超出了我当前的工作范围

【问题讨论】:

    标签: c# .net asp.net-web-api


    【解决方案1】:

    这就是我最终要做的。

    设置请求 cookie。

      var target = new YourController()
      target.Request.Headers.Add("Cookie", "YourCookieKey=Value;");
    

    读取响应 cookie。

     var response = target.YourControllerMethod();
     var result = response.Content.ReadAsAsync<YourModel>().Result;
     Assert.IsTrue(response.Headers.GetValues("Set-Cookie").ToList()[0].Contains("YourCookieKey"));
    

    【讨论】:

      【解决方案2】:

      你可以尝试模拟HttpRequestBase,谷歌搜索并找到了这个——

      var request = new Mock<HttpRequestBase>();
      request.SetupGet(r => r.Cookies).Returns(new HttpCookieCollection());
      request.Object.Cookies.Add(new HttpCookie("TestCookie", "TestValue"));
      request.Object.Cookies.Add(new HttpCookie("AnotherCookie"));
      

      p.s : 你不应该在使用 web api 时使用 cookie。

      【讨论】:

        猜你喜欢
        • 2020-02-10
        • 2013-08-15
        • 2021-08-16
        • 2017-05-13
        • 2021-08-22
        • 1970-01-01
        • 1970-01-01
        • 2017-10-08
        • 1970-01-01
        相关资源
        最近更新 更多