Question

J'ai une action dans mon contrôleur qui vérifie si ma session a expire (== null) et, si elle est le cas, à mon redirect connexion. Je voudrais ajouter un test unitaire pour cela, mais je ne peux pas régler la session null ou soit il Mock. Quelqu'un sait comment je pouvais le faire et si elle est une bonne idée de le tester?

Voici mon action du contrôleur:

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

Et mon test avec toutes mes tentatives pour se moquer de 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());
    }

Mais rien ne fonctionne ...

Merci!

Était-ce utile?

La solution

Voici comment je l'ai fait:

[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());
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top