开发者

Mocking HttpContext to retrieve item form contexts item dictionary

开发者 https://www.devze.com 2023-04-09 11:17 出处:网络
We use MVC3, for our unit tests we use RhinoMocks in our unit tests. When the a request starts we check the domain from which it came and match that to a customer.

We use MVC3, for our unit tests we use RhinoMocks in our unit tests. When the a request starts we check the domain from which it came and match that to a customer. This customer is stored in the HttpContext.Items. Most controllers need this info to do their thing.

var mocks = new MockRepository();
using (var controller = new TestController())
{
    HttpContext context = 
        MockRepository.GenerateStub<HttpContext>();

    Customer customer = new Customer { Key = "testKey" };
    context.Items["Customer"] = customer;

    controller.ControllerContext = 
        new ControllerContext { 
            Controller = controller, 
            RequestContext = 
                new RequestContext(
                    new HttpContextWrapper(context), 
                    new RouteData()
                    ) 
        };
       ...

This code sample shows basically what is needed, however the stub is not allowed as HttpContext is a "sealed" class. The controller accepts a HttpContextBase (there is lot about mocking this one), but it 开发者_运维百科does not expose the Items property.

Thoughts anyone? Or even better a solution ;-)


Creating a HttpContextBase stub and stubbing its Items property will allow you to use the Items dictionary:

        HttpContextBase context =
            MockRepository.GenerateStub<HttpContextBase>();

        Customer customer = new Customer { Key = "testKey" };
        context.Stub(c => c.Items).Return(new Dictionary<string, object>());
        context.Items["Customer"] = customer;
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号