Установите для сеанса значение Null с помощью MvcContrib TestHelper

У меня есть действие в моем контроллере, которое проверяет, истек ли срок действия моего сеанса (== null), и, если это так, перенаправляет на мой логин. Я хотел бы добавить модульный тест для этого, но я не могу установить для сеанса значение null или либо издеваться над ним. Кто-нибудь знает, как я мог это сделать, и если это хорошая идея, чтобы проверить это?

Вот мое действие контроллера:

private InvestigationStep2Model _step2Model
    {
        get
        {
            if (Session == null) return null;
            if (Session["investigationStep2"] == null) Session["investigationStep2"] = new InvestigationStep2Model();
            return (InvestigationStep2Model) Session["investigationStep2"];
        }
        set { Session["investigationStep2"] = value; }
    }

public virtual ActionResult Step2()
    {
        if (_step2Model == null) return RedirectToAction(MVC.Session.Logout());
        ViewData.Model = _step2Model;
        return View();
    }

И мой тест со всеми моими попытками издеваться над Session

[Test]
    public void Step2_RedirectToActionWhenNoSession()
    {
        _builder.InitializeController(_controller);

        Expect.Call(_controller.Session).Repeat.Any().Return(null);
        //_controller.HttpContext.Session.Abandon();//.SetSessionStateBehavior(SessionStateBehavior.Disabled); // .Session..Abandon());// .Stub(b => b.Session).Return(null);

        _mock.ReplayAll();
        var result = _controller.Step2();

        _mock.VerifyAll();
        result.AssertActionRedirect().ToAction<SessionController>(c => c.Logout());
    }

Но ничего не работает...

Спасибо!


person VinnyG    schedule 07.12.2010    source источник


Ответы (1)


Вот как я это сделал:

[Test]
    public void Step2_RedirectToActionWhenNoSession()
    {
        _builder.InitializeController(_controller);

        _controller.HttpContext.BackToRecord();
        _controller.HttpContext.Stub(c => c.Session).Return(null);
        _controller.HttpContext.Replay();

        _mock.ReplayAll();
        var result = _controller.Step2();

        _mock.VerifyAll();
        result.AssertActionRedirect().ToAction<SessionController>(c => c.Logout());
    }
person VinnyG    schedule 17.01.2011