.Net MVC testing controller HTTPContext

Here’s a way to test for HTTPContext in a MVC controller:

public void TestController_HasContext_ContextNotNull()
   var controller = new TestController();

   var server = new Mock<HttpServerUtilityBase>(MockBehavior.Loose);
   var response = new Mock<HttpResponseBase>(MockBehavior.Strict);

   var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
   request.Setup(r => r.UserHostAddress).Returns("");

   var session = new Mock<HttpSessionStateBase>();
   session.Setup(s => s.SessionID).Returns(Guid.NewGuid().ToString());

   var context = new Mock<HttpContextBase>();
   context.SetupGet(c => c.Request).Returns(request.Object);
   context.SetupGet(c => c.Response).Returns(response.Object);
   context.SetupGet(c => c.Server).Returns(server.Object);
   context.SetupGet(c => c.Session).Returns(session.Object);

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


.Net MVC Unit testing a child action

A quick demo of how to unit test a child action in with NUnit/MVC:

The controller action

public ActionResult ChildActionTest(string category)
   var result = new ChildActionModel {ChildProp = category + " This is a child action string."};
   return View("~/Views/Test/ChildActionTest.cshtml", result);

The test

public void TestController_ChildActionTest_ChildView()
   const string testCategory = "TestCategory";
   const string expectedViewName = "~/Views/Test/ChildActionTest.cshtml";

   var controller = new TestController();
   var result = controller.ChildActionTest(testCategory) as ViewResult;

   Assert.IsNotNull(result, "Should have returned a ViewResult");
   Assert.AreEqual(expectedViewName, result.ViewName, "View name should have been {0}",    expectedViewName);