How to use Rhino Mocks to Mock an HttpContext.Application

后端 未结 2 1197
长情又很酷
长情又很酷 2020-12-29 00:38

I\'m new to Mocking frameworks and have started using RhinoMocks to assist with my MVC App Unit Testing.

I\'m using Scott Hanselmanns MVC Mock Helper to assist in mo

2条回答
  •  醉梦人生
    2020-12-29 01:13

    Without delving too deeply, this looks mostly correct.

    The Application property is virtual on HttpContextBase, so you should be able to set up a return value for it from Rhino -- Assuming you're mocking HttpContextBase as Scott Hanselmanns post does.

    Some possible causes, which are really just guesses from lack of information:

    • Did you set up returns for controllerToTest.ControllerContext?
    • Did you set up a return for that objects HttpContext property?
    • Did you set up a return for that objects Application property?

    The reason I ask is that typically when you do expectation setups, you already have references to the objects that will be called as part of your test, so you wouldn't do a property chain like you do with your controllerToTest.ControllerContext.HttpContext. Expect() call.

    Edit:

    I think I see the problem, and I think it's with this part:

    Expect(ctx => ctx.Application[Globals.GlobalsKey])

    I think you're assuming that indexers work the same as properties, when they don't. What you really need to do is set up an expectation on your appState object to receive a call to the Item property, like this:

    // setup expectations -- assumes some of the expectations and mocks 
    // the from original question
    mockHttpBase.Expect(ctx => ctx.Application).Return(appState);
    appState.Expect(ctx => ctx.Item(Globals.GlobalsKey)).Return(tmpAppGlobals);
    
    // run the test
    

提交回复
热议问题