2012-04-06 22 views
7

Estoy intentando crear una clase contenedora para procesar el contenido de HttpContext. Estoy creando una cookie pero no puedo agregar a la colección de cookies HttpContext.Request o Response.Agregar cookie a la colección Request.Cookies

Estoy usando Moq. También estoy usando MvcMockHelp desde el siguiente enlace: http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx

Cuando trato de añadir a la colección Cookies en mi siguiente código:

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

me sale el siguiente error en la cuarta línea de c1 código. Request.Cookies.Add (aCookie);

Object reference not set to an instance of an object. 

También he intentado crear instancias de objeto de contexto de la siguiente manera, pero sigue sin suerte

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

veo que la recolección de las galletas en el interior de solicitud es NULL. ¿Cómo lo instauro?

También he intentado lo siguiente, pero no tuve suerte.

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

Hágame saber lo que estoy haciendo mal.

+0

Compruebe si las galletas es nulo, si es así, crear instancias de ella. – Landern

+0

No puedo crear instancias de cookies. ¿Puedo obtener una muestra para instanciar el código c1.Request.Cookies si es posible? –

+0

¿Puede crear instancias usando este constructor: 'FakeHttpContext (string url)' en su lugar? Pasando la url que solicita; tal vez ayude a crear una instancia de su objeto 'Solicitud'. –

Respuesta

8

mirar el código de Hansleman, la propiedad Request se crea como un Mock, sin embargo, las propiedades de esa maqueta no son de configuración, así que por eso Cookies es nulo, y no se puede establecer que, como se trata de una lectura solo propiedad

tiene dos opciones:

  1. de configuración de la maqueta de la propiedad Cookies en el método FakeHttpContext() o
  2. Si no quieres hacer eso, digamos que usted está haciendo referencia a la biblioteca directamente, a continuación, sólo tiene que reconstituir el HttpRequestBase burlado de la HttpContextBase tiene acceso a, así:

    [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) le devolverá el simulacro, luego podrá configurar sus cookies y usarlo.

En general se puede recrear un Object en su Mock utilizando el método estático Get(MockedThing.Object)

+0

Lo siento por la 'a', no puedo ver cómo tener un bloque de código seguir directamente de una lista. – nicodemus13

+0

El código es solo para la parte 2 de la lista, por lo que * debe * ser parte de él, lo cual se logra sangrando 8 espacios en lugar de 4. – ErikE

Cuestiones relacionadas