Установить сессию равной нулю, используя MvcContrib TestHelper - PullRequest
0 голосов
/ 07 декабря 2010

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

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

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());
    }

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

Спасибо!

1 Ответ

0 голосов
/ 17 января 2011

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

[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());
    }
...