2010-12-07 20 views
0

J'ai une action dans mon contrôleur qui vérifie si ma session a expiré (== null) et, si c'est le cas, redirige vers ma connexion. Je voudrais ajouter un test unitaire pour cela mais je ne peux pas mettre la Session à zéro ou Mock it. Quelqu'un sait comment je pourrais faire cela et si c'est une bonne idée de le tester?Définir la session à Null en utilisant MvcContrib TestHelper

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!

Répondre

0

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