Прошло много времени с тех пор, как я использовал MvcContrib, поэтому я собрал последний код и сделал быстрый тестовый проект.Это очень странно.Глядя на код MvcContrib (в частности, TestControllerBuilder), он создает макеты для большинства объектов (запрос, ответ, сервер и т. Д.), Но не для Session.Я не уверен, почему это так - возможно, придется спросить создателей.
Однако, есть способ издеваться над этим самостоятельно.Вы можете создать свой собственный фиктивный сеанс и указать контроллеру использовать свой вместо сеанса из MvcContrib.TestHelpers.Вот что я сделал в своем тесте:
var mockSession = MockRepository.GenerateStub<HttpSessionStateBase>();
controller.HttpContext.BackToRecord();
controller.HttpContext.Stub(c => c.Session).Return(mockSession);
controller.HttpContext.Replay();
Теперь я запускаю свой метод контроллера и затем использую синтаксис AAA Rhino.Mocks, чтобы убедиться, что метод Abandon был вызван:
controller.Session.AssertWasCalled(s => s.Abandon());
Если вы хотите использовать семантику записи / воспроизведения, вы можете установить свои ожидания перед вызовом controller.HttpContext.Replay()
.