Издеваться над сессией в MVC 3 - PullRequest
3 голосов
/ 03 марта 2011

Я пытаюсь смоделировать переменную 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.Что я делаю не так?

1 Ответ

1 голос
/ 03 марта 2011

Должно быть, это проблема конфигурации, вызванная добавлением проекта модульного тестирования в уже существующий проект, потому что я только что создал новый проект MVC 3, проверил «Создание проекта модульного теста», добавил все мои контроллеры, моделии т. д. из старого проекта в новый, и он работает нормально.

...