2017-01-28 27 views
-2

セッションとログオフのユーザーをクリアする方法をテストするにはどうすればよいですか?私のコントローラメソッドはMocking unit testでsession.clear()をテストする方法

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult LogOff() 
    { 
    SessionAdapter.Clear(); 
    SessionAdapter.Abandon();   
    AuthenticationManager.SignOut 
        (DefaultAuthenticationTypes.ApplicationCookie); 
    return RedirectToAction("Index", "Home"); 
    } 

のように見えます

ここでセッションアダプタは私の静的クラス

public static class SessionAdapter 
    { 
    private static string sessionKey = "sessionInfoKey"; 

    public static SessionInfo Instance 
    { 
     get 
     { 
     return HttpContext.Current.Session[sessionKey] == null ? null : (SessionInfo)HttpContext.Current.Session[sessionKey]; 
     } 
     set 
     { 
     HttpContext.Current.Session[sessionKey] = value; 
     } 
    } 

    public static bool DoesSessionExists { get { return HttpContext.Current.Session[sessionKey] == null ? false : true; } } 

    public static void Clear() 
    { 
     HttpContext.Current.Session.Clear(); 
    } 
} 

である、それは外部のだから、あなたがセッションをからかうべきでユニットテストでは

答えて

1

に私を助けてください依存。単体テストは.netフレームワークではなく、コードをテストする必要があります。

有効なテストは、実際にSession.Clearをテストするのではなく、セッションをクリアするのではなく、Session.Clearの呼び出しが行われたことを確認することです。

これは、偽のセッションを設定することによって行うことができます。ユニットテストのコントローラコンテキストをセットアップするための拡張メソッドです。

public static void SetControllerContext(このコントローラコントローラ) { var fakeContext = A.Fake(); var fakeRequest = A.Fake(); var fakeResponse = A.Fake(); var fakeSessionState = A.Fake();

 A.CallTo(() => fakeRequest.HttpMethod).Returns(HttpVerbs.Post.ToString()); 
     A.CallTo(() => fakeContext.Response).Returns(fakeResponse); 
     A.CallTo(() => fakeContext.Request).Returns(fakeRequest); 
     A.CallTo(() => fakeContext.Session).Returns(fakeSessionState); 

     var fakeRequestContext = new RequestContext(fakeContext, new RouteData()); 

     controller.ControllerContext = new ControllerContext(fakeRequestContext, controller); 
    } 

これはFakeItEasyを使用していますが、Moqでも同じことができます。

からMS "ASP.NETセッション状態を使用すると、ユーザーがWebアプリケーション内のASP.NETページをナビゲートするときに、ユーザーの値を格納および取得できます。

スタティッククラスでラップする際の値は何ですか?

関連する問題