Unit testing in asp.net MVC, how do I mock a page request?

后端 未结 3 527
野的像风
野的像风 2020-12-31 19:15

How do I mock a page request for a .net MVC page?

相关标签:
3条回答
  • 2020-12-31 19:45

    Using Moq:

    var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
    request.Setup(x => x.ApplicationPath).Returns("/");
    request.Setup(x => x.Url).Returns(new Uri("http://localhost/home"));
    request.Setup(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection());
    
    var context = new Mock<HttpContextBase>(MockBehavior.Strict);
    context.SetupGet(x => x.Request).Returns(request.Object);
    
    var controller = new YourController();
    controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
    
    0 讨论(0)
  • 2020-12-31 19:51

    Manually (because I hate Mocking frameworks that require 8 lines of setup per test)

    // in some common location, only once
    public class MockHttpContext : HttpContextBase
    {
        public MockHttpRequest m_request = new MockHttpRequest();
        public MockHttpResponse m_response = new MockHttpResponse();
    
        public override HttpRequestBase Request
        { get { return m_request; } }
    
        public override HttpResponseBase Response
        { get { return m_response; } }
    }
    
    public class MockHttpRequest : HttpRequestBase
    {
        // override whatever bits you want (eg cookies)
    }
    
    public class MockHttpResponse : HttpResponseBase
    {
        // override whatever bits you want (eg cookies)
    }
    
    // in your specific test
    controller = new YourController {
        ControllerContext = new ControllerContext { HttpContext = new MockHttpContext() }
    };
    
    0 讨论(0)
  • 2020-12-31 20:01

    Using RhinoMocks:

     var httpContext = MockRepository.GenerateMock<HttpContextBase>();
     var httpRequest = MockRepository.GenerateMock<HttpRequestBase>();
    
     httpContext.Expect( c => c.Request ).Return( httpRequest ).Repeat.Any();
    
     ... set up expectations on request...
    
     var controller = new MyController();
     controller.ControllerContext = new ControllerContext( httpContext,
                                                           new RouteData(),
                                                           controller );
    
     ...invoke action, check assertions...
    
     httpContext.VerifyAllExpectations();
     httpRequest.VerifyAllExpectations();
    
    0 讨论(0)
提交回复
热议问题