2010-12-07 34 views
0

我在我的控制器中有一個操作,用於驗證我的會話是否已過期(== null),如果是這種情況,則重定向到我的登錄。我想爲此添加單元測試,但我無法將Session設置爲null或者對其進行模擬。任何人都知道我該怎麼做,如果測試它是個好主意?使用MvcContrib將會話設置爲空TestHelper

這裏是我的控制器操作:

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

我與我的所有嘗試測試嘲笑會議

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

但沒有什麼工作......

謝謝!

回答

0

我是這樣做的:

[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()); 
    } 
相關問題