Ich habe einen Controller in C #, der das ASP.Net MVC-Framework verwendet
public class HomeController:Controller{
public ActionResult Index()
{
if (Request.IsAjaxRequest())
{
//do some ajaxy stuff
}
return View("Index");
}
}
Ich bekam einige Tipps zum Verspotten und hoffte, den Code mit den folgenden und RhinoMocks testen zu können
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);
Ich erhalte jedoch immer wieder diesen Fehler:
Ausnahme System.ArgumentNullException: System.ArgumentNullException: Wert darf nicht null sein. Parametername: Anforderung bei System.Web.Mvc.AjaxRequestExtensions.IsAjaxRequest (HttpRequestBase-Anforderung)
Seit der Request
Objekt auf der Steuerung keinen Setter hat. Ich habe versucht, diesen Test ordnungsgemäß zu verwenden, indem ich den empfohlenen Code aus einer Antwort unten verwendet habe.
Dies verwendete Moq anstelle von RhinoMocks, und bei der Verwendung von Moq verwende ich Folgendes für denselben Test:
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);
aber erhalte den folgenden Fehler:
Ausnahme System.ArgumentException: System.ArgumentException: Ungültiges Setup für ein nicht überschreibbares Mitglied: x => x.Headers ["X-Requested-With"] bei Moq.Mock.ThrowIfCantOverride (Ausdrucksetup, MethodInfo methodInfo)
Wieder scheint es, als könnte ich den Anforderungsheader nicht setzen. Wie setze ich diesen Wert in RhinoMocks oder Moq?