2015-03-17 4 views
0

Я пытаюсь создать оболочку cookie, чтобы я мог использовать ее для установки и получения значений cookie в моих действиях в mvc. У нас уже есть HttpContextWrapper, у которого есть свойства запроса и ответа.Cookie wrapper in asp.net mvc

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) Как я могу повторно использовать эту оболочку для установки и получения значения куки?

2) Цель определения значений печенья - возможность выполнять модульное тестирование. Я устанавливаю и получаю значения cookie непосредственно в своих методах действий. Вместо этого я хочу сделать его многоразовым и единым тестируемым.

Любая помощь по этому поводу очень ценится.

Благодаря

WH

+0

Хотя следующее сообщение адресует обертка для сессии подход, представленный может быть полезным для принятия решения о том, как обрабатывать ваши требования: http://stackoverflow.com/questions/5940033/asp-net-mvc-3-httpcontext-wrapper –

+1

Это также может быть полезно: http://stackoverflow.com/questions/16767131/difference-between-httpcontext-and- час ttpcontextwrapper-in-terms-of-unit-testing-a –

+0

Спасибо @DavidTansey за ответ. У меня есть идея сеанса warpper, так как я его уже использую. Я ищу что-то, связанное с куки-файлами (Response.Cookies) – Kanchana

ответ

0

Благодаря @DavidTansey для входов.

Внедрен следующий код и способен высмеять Response.Cookies. Однако это не оболочка контекста, которую я ожидал, но, по крайней мере, я могу двигаться вперед с этим.

Unit Test файлы:

общественного класса HttpContextMock: HttpContextBase { частный ответ 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; 
     } 
    } 
} 

Test.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); 

} 

HomeController:

public jsonresult Welcome(int userid) 
    { 

.................... 

    var cookie = new HttpCookie("TitleMessage") {Value = "Welcome"}; 
    Response.Cookies.Add(cookie); 

}