Tengo un controlador en C # usando el marco ASP.Net MVC
public class HomeController:Controller{
public ActionResult Index()
{
if (Request.IsAjaxRequest())
{
//do some ajaxy stuff
}
return View("Index");
}
}
Recibí algunos consejos sobre burlas y esperaba probar el código con lo siguiente y RhinoMocks
var mocks = new MockRepository();
var mockedhttpContext = mocks.DynamicMock<HttpContextBase>();
var mockedHttpRequest = mocks.DynamicMock<HttpRequestBase>();
SetupResult.For(mockedhttpContext.Request).Return(mockedHttpRequest);
var controller = new HomeController();
controller.ControllerContext = new ControllerContext(mockedhttpContext, new RouteData(), controller);
var result = controller.Index() as ViewResult;
Assert.AreEqual("About", result.ViewName);
Sin embargo, sigo recibiendo este error:
Excepción System.ArgumentNullException: System.ArgumentNullException: el valor no puede ser nulo. Nombre del parámetro: solicitud en System.Web.Mvc.AjaxRequestExtensions.IsAjaxRequest (solicitud HttpRequestBase)
Dado que el Request
objeto en el controlador no tiene setter. Traté de hacer que esta prueba funcionara correctamente usando el código recomendado de una respuesta a continuación.
Esto usó Moq en lugar de RhinoMocks, y al usar Moq utilizo lo siguiente para la misma prueba:
var request = new Mock<HttpRequestBase>();
// Not working - IsAjaxRequest() is static extension method and cannot be mocked
// request.Setup(x => x.IsAjaxRequest()).Returns(true /* or false */);
// use this
request.SetupGet(x => x.Headers["X-Requested-With"]).Returns("XMLHttpRequest");
var context = new Mock<HttpContextBase>();
context.SetupGet(x => x.Request).Returns(request.Object);
var controller = new HomeController(Repository, LoginInfoProvider);
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
var result = controller.Index() as ViewResult;
Assert.AreEqual("About", result.ViewName);
pero recibe el siguiente error:
Excepción System.ArgumentException: System.ArgumentException: Configuración no válida en un miembro no reemplazable: x => x.Headers ["X-Requested-With"] en Moq.Mock.ThrowIfCantOverride (Configuración de expresión, MethodInfo methodInfo)
De nuevo, parece que no puedo configurar el encabezado de la solicitud. ¿Cómo configuro este valor, en RhinoMocks o Moq?