asp.net mvc中的Cookie包装器



我正在尝试创建一个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);
}

最新更新