C# – How to Mock Request object in unit testing asp.net mvc application

asp.net-mvccmoqrequestunit testing

I am working on an asp.net mvc 3.0 application. In unit testing one of the action method in my controller, I was getting an error.

How to mock: Request.Params["FieldName"]

I have included Moq framework, but was not sure how to pass value

Here is my code… Please suggest…

 var request = new Mock<System.Web.HttpRequestBase>();

 request
     .SetupGet(x => x.Headers)
     .Returns(
         new System.Net.WebHeaderCollection
         {
             {"X-Requested-With", "XMLHttpRequest"}
         });

 var context = new Mock<System.Web.HttpContextBase>();

 context.SetupGet(x => x.Request).Returns(request.Object);

 ValidCodeController target = new ValidCodeController();

 target.ControllerContext =
     new ControllerContext(context.Object, new RouteData(), target);

Best Answer

Params is a NameValueCollection property that can be set-up in a similar way to Headers:

var requestParams = new NameValueCollection
{
    { "FieldName", "value"}
};

request.SetupGet(x => x.Params).Returns(requestParams);