Я пытаюсь смоделировать переменную Session контроллера, используя Moq.Я продолжаю сталкиваться с тем, что сессия видна из теста, но не имеет значения внутри фактического контроллера.
Тестовый код:
[TestMethod]
public void SessionTest()
{
var controller = new BaseController();
var controllerContext = new Mock<ControllerContext>();
controllerContext.Setup(cc => cc.HttpContext.Session["user"]).Returns(new User());
controller.ControllerContext = controllerContext.Object;
User currentUser = controller.CurrentUser; //fails (throws NullReferenceException)
User currentUser = (User)controller.Session["test"]; //works
}
Код контроллера:
public User CurrentUser
{
get
{
return (User)Session["user"]; //HttpContext is null at this point
}
}
Приведенный выше код следует наиболее распространенному шаблону, который я видел (несколько публикаций SO, пример MVC 2 в Action Ch. 7 и т. Д.), Но все еще не работает.Внутри контроллера ControllerContext имеет значение null, как и HttpContext.Что я делаю не так?