2012-04-06 2 views
7

Я пытаюсь создать класс-оболочку для обработки содержимого HttpContext. Я создаю файл cookie, но не могу добавить его в коллекцию файлов HttpContext.Request или Response.Добавить файл cookie в коллекцию Request.Cookies

Я использую Moq. Также я использую MvcMockHelp по следующей ссылке: http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx

Когда я пытаюсь добавить к коллекции Cookies в моем следующем коде:

 HttpContextBase c1 = MvcMockHelpers.FakeHttpContext(); 
     HttpCookie aCookie = new HttpCookie("userInfo"); 
     aCookie.Values["userName"] = "Tom"; 
     c1.Request.Cookies.Add(aCookie); <------ Error here 

я получаю следующее сообщение об ошибке на 4-й строке кода c1. Request.Cookies.Add (aCookie);

Object reference not set to an instance of an object. 

Я также попытался инстанцированием объекта контекста следующим образом, но до сих пор не повез

HttpContextBase c = MvcMockHelpers.FakeHttpContext 
      ("~/script/directory/NAMES.ASP?city=irvine&state=ca&country=usa"); 

Я не вижу, что сбор Cookies внутри запроса является NULL. Как мне создать экземпляр?

Я также пробовал следующее, но не повезло.

c1.Request.Cookies["userName"].Value = "Tom"; 

Пожалуйста, дайте мне знать, что я делаю неправильно.

+0

Проверьте, чтобы увидеть, если печенье имеет нулевое значение, если да, то создать его экземпляр. – Landern

+0

Я не могу создать экземпляр Cookies. Могу ли я получить образец для создания экземпляра кода c1.Request.Cookies, если это возможно? –

+0

Можете ли вы создать экземпляр с помощью этого конструктора: 'FakeHttpContext (string url)' вместо этого? Передача запрашивающего URL-адреса; возможно, это поможет создать экземпляр объекта 'Request'. –

ответ

8

Глядя на код Hansleman, в собственность Request создается как Mock, однако свойства этого издеваться не установки, так вот почему Cookies имеет нулевое значение, и вы не можете установить его, так как это Read- только свойство.

У вас есть два варианта:

  1. Настройка макет из Cookies имущества в методе FakeHttpContext() или
  2. Если вы не хотите, чтобы сделать это, говорят, что вы ссылки на библиотеку непосредственно, то вы можете просто воссоздать высмеивал HttpRequestBase от HttpContextBase у вас есть доступ, например, так:

    [Test] 
    public void SetCookie() 
    { 
        var c1 = MvcMockHelpers.FakeHttpContext(); 
        var aCookie = new HttpCookie("userInfo"); 
        aCookie.Values["userName"] = "Tom"; 
    
        var mockedRequest = Mock.Get(c1.Request); 
        mockedRequest.SetupGet(r => r.Cookies).Returns(new HttpCookieCollection()); 
        c1.Request.Cookies.Add(aCookie); 
    
        Debug.WriteLine(c1.Request.Cookies["userInfo"].Value); 
    } 
    

    Mock.Get(object) вернет вам Mock, тогда вы можете настроить на нем свои куки и использовать его.

В общем, вы можете воссоздать Object в его Mock с помощью статического метода Get(MockedThing.Object)

+0

Извините за «a», я не вижу, как блок кода следует непосредственно из списка. – nicodemus13

+0

Код предназначен только для части 2 списка, поэтому он должен * быть частью его, который выполняется путем вложения 8 пробелов вместо 4. – ErikE

Смежные вопросы