ホームページ > バックエンド開発 > C++ > 単体テストのために HttpContext.Current.Session をモックする方法は?

単体テストのために HttpContext.Current.Session をモックする方法は?

Patricia Arquette
リリース: 2025-01-09 06:36:50
オリジナル
646 人が閲覧しました

How to Mock HttpContext.Current.Session for Unit Testing?

HttpContext.Current.Session を利用する単体テスト コード

質問:

試行中Web サービスを単体テストするために、設定時に null 参照例外が発生しました。 HttpContext.Current.Session の値。 SimpleWorkerRequest を使用してコンテキストを作成したにもかかわらず、HttpContext.Current.Session は null のままです。単体テスト内で現在のセッションを初期化するにはどうすればよいですか?

回答:

HttpContext とそのセッション オブジェクトをモックするには、次の 2 つの方法のいずれかを使用できます。

  1. を使用するリフレクション:

    <br>public static HttpContext FakeHttpContext()<br>{<br> var httpRequest = new HttpRequest("", "http://example.com/" , "");<br> var stringWriter = new StringWriter();<br> var httpResponse = new HttpResponse(stringWriter);<br> var httpContext = new HttpContext(httpRequest, httpResponse);</p>
    <p>var sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollection(),</p>
    <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">                                     new HttpStaticObjectsCollection(), 10, true,
                                         HttpCookieMode.AutoDetect,
                                         SessionStateMode.InProc, false);
    
    ログイン後にコピー

httpContext.Items["AspSession"] = typeof(HttpSessionState).GetConstructor(

                         BindingFlags.NonPublic | BindingFlags.Instance,
                         null, CallingConventions.Standard,
                         new[] { typeof(HttpSessionStateContainer) },
                         null)
                 .Invoke(new object[] { sessionContainer });
ログイン後にコピー

return httpContext;
}

  • SessionStateUtility の使用:

    <br>SessionStateUtility.AddHttpSessionStateToContext(httpContext, sessionContainer);<br> 

  • モック HttpContext を作成したら、それを単体テストの現在のコンテキストとして設定できます:

    <br>HttpContext.Current = MockHelper.FakeHttpContext();<br>

    以上が単体テストのために HttpContext.Current.Session をモックする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    著者別の最新記事
    人気のおすすめ
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート