Using MOQ to mock ASP.Net MVC controller, I follow this approach:
var fakeHttpContext = new Mock<HttpContextBase>();
fakeHttpContext.Setup(t => t.User).Returns(genericPrincipal);
var request = new Mock<HttpRequestBase>();
var controllerContext = new Mock<ControllerContext>();
controllerContext.Setup(t => t.HttpContext)
.Returns(fakeHttpContext.Object);
var controller = InitMyontrollerConstroctor(controllerContext);
And Here is how I initialize mycontroller:
var controller = new MyController(IService service)
{
ControllerContext = controllerContext.Object,
};
return controller;
But a read-only property exist inside of MyController
, which depends on HttpContext
:
private static readonly string ServerPath = System.Web.HttpContext.Current.Server.MapPath("~/content/");
public ProfileController(IService service)
{
}
When I try to initialize my controller, it throws "Object reference not set to an instance of an object." Not error. It is because HttpContext
is null.
So, How can I supply HttpContext
to my controller, without using as a parameter of the constructor.