2010-12-07 10 views
0

自分のセッションに有効期限(== null)があるかどうかを確認するアクションがコントローラにあり、ログインにリダイレクトされます。私はこれのための単体テストを追加したいと思いますが、私はセッションをnullに設定することもMockすることもできません。どのように私はそれを行うことができ、それをテストすることは良いアイデアなら誰でも知っていますか?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()); 
    } 
関連する問題