在 WebAPI 中模拟 HttpResponseHeaders 和 cookie

jcv*_*dan 5 .net c# asp.net-web-api

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

Request.Headers.GetCookies("CookieName").FirstOrDefault()
Run Code Online (Sandbox Code Playgroud)

request 对象是可模拟的,但不幸的是,我无法模拟 headers 属性(它是一个HttpRequestHeaders对象),因为它HttpRequestHeaders是密封的,而且它的方法都不是虚拟的,而且它也没有实现接口(MS 干得好)。

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

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

Sus*_*ush 5

这就是我最终要做的。

设置请求 cookie。

  var target = new YourController()
  target.Request.Headers.Add("Cookie", "YourCookieKey=Value;");
Run Code Online (Sandbox Code Playgroud)

读取响应cookie。

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


Yas*_*ser 0

你可以尝试模拟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"));
Run Code Online (Sandbox Code Playgroud)

ps:使用 Web api 时不应使用 cookie。