Модульное тестирование ASP.NET MVC — сеансы

После поиска в StackOverflow и Google я думаю, что то, что я делаю, должно быть правильным, однако результаты, похоже, не очень хорошие.

    [TestMethod]
    public void LoginAction_Should_Return_View_and_User_Authenticated()
    {
        // Arrange
        var mock = new Mock<ControllerContext>();
        var mockSession = new Mock<HttpSessionStateBase>();
        mock.Setup(p => p.HttpContext.Session).Returns(mockSession.Object);

        var testData = FakeUserData.CreateTestUsers();
        var repository = new FakeUserRepository(testData);
        var controller = new AccountController(repository);
        controller.ControllerContext = mock.Object;

        // Act
        var result = controller.Login("testuser1", "testuser1");

        // Assert
        Assert.AreEqual("testuser1", controller.HttpContext.Session["Username"]);
        Assert.IsTrue((bool)controller.HttpContext.Session["IsAuthenticated"]);
        Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
    }

Когда я запускаю тест, значение controller.HttpContext.Session["Username"] равно null, однако я устанавливаю значение имени пользователя с помощью помощника сеанса. Я делаю что-то совершенно неправильно, или что-то еще? Любая помощь будет принята с благодарностью.


person Tom Bell    schedule 06.09.2009    source источник
comment
Спасибо, что показали, как издеваться над сеансом контроллера :-)   -  person Matt Frear    schedule 15.01.2014


Ответы (1)


Используйте Mock.Verify, чтобы проверить, пытался ли базовый код установить Session["Username"].

Если в вашем коде необходимо установить переменную сеанса и использовать ее, посмотрите здесь.

Быстрый старт тоже бесценен.

person Arnis Lapsa    schedule 06.09.2009