Не углубляясь слишком глубоко, это выглядит в основном правильно.
Свойство Application является виртуальным в HttpContextBase, поэтому вы должны иметь возможность установить для него возвращаемое значение из Rhino - при условии, что вы издеваетесь над HttpContextBase, как это делает пост Скотта Хансельманна.
Некоторые возможные причины, которые на самом деле являются лишь догадками из-за недостатка информации:
- Вы настроили возврат для
controllerToTest.ControllerContext
- Вы установили возврат для , что
объекты HttpContext свойство?
- Вы установили возврат для , что
Объекты Свойство приложения?
Причина, по которой я спрашиваю, состоит в том, что, как правило, когда вы выполняете настройку ожидания, у вас уже есть ссылки на объекты, которые будут вызываться как часть вашего теста, поэтому вы не будете делать цепочку свойств, как вы делаете с вашим controllerToTest.ControllerContext.HttpContext.
Expect()
вызов.
Редактировать:
Я думаю, что вижу проблему, и я думаю, что это с этой частью:
Expect(ctx => ctx.Application[Globals.GlobalsKey])
Я думаю, вы предполагаете, что индексаторы работают так же, как свойства, когда они этого не делают. Что вам действительно нужно сделать, так это настроить ожидание для вашего объекта appState
для получения вызова свойства Item, например:
// 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