2012-04-06 46 views
7

我試圖創建一個包裝類來處理HttpContext的內容。我正在創建一個cookie,但無法添加到HttpContext.Request或Response cookie集合中。添加cookie來Request.Cookies集合

我使用起訂量。 還有我使用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 

我得到的代碼C1的4號線下面的錯誤。 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

檢查,看是否餅乾爲null重新創建Object到其Mock,如果是這樣,實例化。 – Landern 2012-04-06 16:22:05

+0

我無法實例化餅乾。我能得到的樣品,如果可能的實例c1.Request.Cookies代碼? – 2012-04-06 16:27:00

+0

你能否使用這個構造函數實例化:'FakeHttpContext(string url)'而不是?傳遞請求的URL;也許它會幫助實例化你的Request對象。 – 2012-04-06 16:32:20

回答

8

看着Hansleman的代碼中,Request屬性被創建爲Mock,然而,模擬的性能都沒有安裝,所以這就是爲什麼Cookies是空的,你不能對它進行設置,因爲它是一個只讀只有財產。

你有兩個選擇:

  1. 設置在FakeHttpContext() 方法Cookies屬性的模擬,或
  2. 如果你不想做,說你引用庫直接,那麼你可以簡單地重建從您可以訪問,像這樣的HttpContextBase嘲笑HttpRequestBase

    [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)將返回你的模擬,然後你可以設置你的餅乾,並使用它。

一般來說,你可以使用靜態方法Get(MockedThing.Object)

+0

對不起'a',我看不到如何直接從列表中獲得代碼塊。 – nicodemus13 2012-04-07 14:17:40

+0

該代碼僅用於列表的第2部分,所以它*應該*成爲它的一部分,這是通過縮進8個空格而不是4個來實現的。 – ErikE 2016-03-03 23:05:58