2010-02-10 8 views
5

Actualmente estoy probando mi aplicación y estoy atascado tratando de descubrir cómo crear una referencia URL falsa personalizada. Intenté codificarlo, pero estoy recibiendo un error que es de solo lectura. Esto es lo que he probado hasta ahora:Creando una referencia URL simulada en ASP.Net MVC para Pruebas unitarias

fakeController.HttpContext.Request.UrlReferrer.AbsolutePath = "http://www.yahoo.com"; 

, así como,

fakeController.Request.UrlReferrer = "http://www.yahoo.com"; 

He buscado en la web para ver algunas ideas sobre cómo crear una dirección URL falsa de referencia/maqueta para mi falsa controlador, pero no han tenido suerte. Cualquier sugerencia es bienvenida.

Nota: Estoy utilizando las instalaciones integradas de pruebas de unidad de Visual Studios.

ACTUALIZACIÓN:

Gracias a todos por sus sugerencias hasta ahora, estaría más que dispuesto a utilizar cualquier otro sistema de prueba de la unidad fuera de Visual Studio, por desgracia aquí en mi trabajo sólo se nos permite utilizar Estudio de Visual sistema incorporado, así que tengo que trabajar con lo que tengo. Gracias, sin embargo, es bueno saber que estas opciones están disponibles.

Respuesta

1

Recomiendo cambiar a un Mock Framework como NMock o Rhino Mock, que le permite crearlos, y devuelve un valor específico para una llamada determinada, como el método get en esa propiedad.

7

Cree una solicitud simulada para el HttpContext, luego configure una expectativa sobre la Solicitud que devuelve un Uri. Ejemplo usando RhinoMocks.

var context = MockRepository.GenerateMock<HttpContextBase>(); 
var request = MockRepository.GenerateMock<HttpRequestBase>(); 
request.Expect(r => r.UrlReferrer).Returns(new Uri("http://www.yahoo.com")).Repeat.AtLeastOnce(); 
context.Expect(c => c.Request).Returns(request).Repeat.Any(); 

fakeController.HttpContext = context; 
+0

+1 empecé a escribir una respuesta similar utilizando Moq pero se me adelantó –

+0

bueno tvanfosson, intentó jugar un poco con este fragmento de código, pero obtengo un error para context.Expect() Argumento '1': no ​​se puede convertir de 'System.Web.HttpRequestBase' a 'System.Web.HttpRequest' – kingrichard2005

1

usted va a necesitar para crear toda una HttpContext simulacro con el fin de lograr esto, lamentablemente. En lugar de codificarlo en forma rígida, te sugiero que utilices los simulacros, ya que esto te permitirá evitar la creación de piezas del objeto que realmente no necesitas.

Sugeriría revisar Scott Hanselmann's MvcMockHelpers publicación para tener una idea de lo que está involucrado (incluye el código para ambos, Rhino y Moq).

2

La respuesta de tvanfosson va en la dirección correcta, pero está un poco desactualizada. (OP Por supuesto no podía usar MOQ, añadió para futura referencia)

// Dependency Mocks initialization .... 
    .... 
    MyController controller = new MyController(mock.Object, ...dependencies...); 

    var context = new Mock<HttpContextBase>(); 
    var request = new Mock<HttpRequestBase>(); 
    request.Setup(r => r.UrlReferrer).Returns(new Uri("http://www.site.com")); 
    context.Setup(c => c.Request).Returns(request.Object); 

    // Setting the HttpContext 
    // HttpContext is read-only, but it is actually derived from the 
    // ControllerContext, which you can set. 
    controller.ControllerContext = new ControllerContext(context.Object, 
     new RouteData(), controller); 
    //target.HttpContext = context.Object; // outdated 

HttpContext from Controller context

Cuestiones relacionadas