HttpContext.Current.Session を利用する単体テスト コード
質問:
試行中Web サービスを単体テストするために、設定時に null 参照例外が発生しました。 HttpContext.Current.Session の値。 SimpleWorkerRequest を使用してコンテキストを作成したにもかかわらず、HttpContext.Current.Session は null のままです。単体テスト内で現在のセッションを初期化するにはどうすればよいですか?
回答:
HttpContext とそのセッション オブジェクトをモックするには、次の 2 つの方法のいずれかを使用できます。
を使用するリフレクション:
<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 サイトの他の関連記事を参照してください。