Use Moq to simulate HttpContext in ASP.NET MVC
When trying to simulate HttpContext when testing, you may encounter an error indicating that the HttpContext property is read-only. This article will provide a solution to this problem and explain how to use Moq to mock the HttpContext and its dependencies.
Overcoming read-only issues
In the HomeController class, the HttpContext property is indeed read-only. However, it is possible to set the ControllerContext property, which contains HttpContext as a subproperty.
<code>controller.ControllerContext = new ControllerContext( context.Object, new RouteData(), controller );</code>
Example
The following code demonstrates how to set a mocked HttpContext using Moq:
<code>[TestMethod] public void Home_Message_Display_Unknown_User_when_coockie_does_not_exist() { var context = new Mock<httpcontextbase>(); var request = new Mock<httprequestbase>(); context .Setup(c => c.Request) .Returns(request.Object); HomeController controller = new HomeController(); controller.ControllerContext = new ControllerContext( context.Object, new RouteData(), controller ); ... }</httprequestbase></httpcontextbase></code>
More resources
For more details on mocking RequestContext and HttpContext, please see the following resources:
The above is the detailed content of How to Mock HttpContext in ASP.NET MVC Using Moq?. For more information, please follow other related articles on the PHP Chinese website!