Tuesday, March 2, 2010

ASP.NET MVC Unit testing - Session Mocking with MOQ

If your MVC controller use session objects when you write unit tests and try to run them you will definitely get the error "Object reference not set to an instance of object" type error if you haven't mock the Session in your unit test project. For the purpose I have use the Unit testing tool MOQ. You can download the MOQ binaries from here.

Just add a reference to moq.dll from your project and create few methods like below inside your controllerTest class.

public Mock CreateMockControllerContext()
{
var mock = new Mock();

mock.Setup(p => p.HttpContext.Session["personName"]).Returns("personName");
mock.Setup(p => p.HttpContext.Session["id"]).Returns("id");

return mock;
}


HomeController CreateHomeController()
{
return new HomeController();
}


HomeController CreateHomeController As()
{
var controller = CreateHomeController();
controller.ControllerContext = CreateMockControllerContext().Object;
return controller;
}

Now inside your Test method implement the controller mock like this.

[TestMethod]
public void TestSearchJobsWithGivenPersonNameOnly()
{
// Arrange
HomeController controller = new HomeController();
controller = CreateHomeControllerAs();

// Act
var result = controller.SearchJobs() as ViewResult;

// Assert
Assert.AreEqual(5, controller.ViewData["RecordCount"]);
}

0 comments:

Post a Comment