我正在尝试创建一个cookie包装器,这样我就可以使用它在mvc中的操作中设置和获取cookie值。我们已经有了HttpContextWrapper,它具有请求和响应属性。
HttpContextWrapper:
public class HttpContextWrapper : IHttpContext
{
private readonly HttpContext _httpContext;
private readonly HttpContextBase _httpContextBase;
public HttpContextWrapper(HttpContext httpContext)
{
_httpContext = httpContext;
_httpContextBase = new System.Web.HttpContextWrapper(httpContext);
}
public HttpRequest Request
{
get { return _httpContext.Request; }
}
public HttpContextBase Base
{
get { return _httpContextBase; }
}
public HttpResponse Response
{
get { return _httpContext.Response; }
}
}
IHttpContext:
public interface IHttpContext
{
HttpRequest Request { get; }
HttpContextBase Base { get; }
HttpResponse Response { get; }
}
1) 如何重用此包装来设置和获取cookie值?
2) 扭曲cookie值的目的是能够执行单元测试。我直接在我的操作方法中设置和获取cookie值。相反,我想让它可重复使用,并可进行单元测试。
非常感谢在这方面的任何帮助。
感谢
WH
感谢@DavidTansey的输入。
实现了以下代码,并能够模拟Response.Cookies。然而,这不是我所期望的上下文包装器,但至少我能够继续前进。
单元测试文件:
公共类HttpContextMock:HttpContextBase{private HttpResponseBase响应;
public override HttpResponseBase Response
{
get
{
if (this.response == null)
{
this.response = new HttpResponseMock();
}
return this.response;
}
}
}
public class HttpResponseMock : HttpResponseBase
{
private HttpCookieCollection cookies;
public override HttpCookieCollection Cookies
{
get
{
if (this.cookies == null)
{
this.cookies = new HttpCookieCollection();
}
return this.cookies;
}
}
}
测试.cs:
public void TestMethod()
{
var _controller = new HomeContoller();
var httpContext = new HttpContextMock();
_controller.ControllerContext = new ControllerContext(httpContext, new RouteData(),_controller);
var result = _controller.Welcome(userId);
Assert.AreEqual("Welcome", _controller.Response.Cookies["TitleMessage"].Value);
}
家庭控制器:
public jsonresult Welcome(int userid)
{
....................
var cookie = new HttpCookie("TitleMessage") {Value = "Welcome"};
Response.Cookies.Add(cookie);
}