単体テストで HttpContext.Current.Session をモックする
HttpContext.Current.Session
値にアクセスする Web サービスの単体テストを作成する場合、セッションが初期化されていないと null 参照例外が発生する可能性があります。この問題を解決するには、単体テストに模擬セッションを使用します。
1 つの方法は、新しい HttpSessionStateContainer
を使用してモック HttpContext
を作成することです。その方法は次のとおりです:
<code class="language-csharp">public static HttpContext FakeHttpContext() { var httpRequest = new HttpRequest("", "http://example.com/", ""); var stringWriter = new StringWriter(); var httpResponse = new HttpResponse(stringWriter); var httpContext = new HttpContext(httpRequest, httpResponse); var sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollection(), 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; }</code>
あるいは、Brent M. Spell が提案しているように、HttpSessionStateContainer
を HttpContext
に直接追加することもできます:
<code class="language-csharp">SessionStateUtility.AddHttpSessionStateToContext(httpContext, sessionContainer);</code>
単体テストでこの模擬セッションを使用します:
<code class="language-csharp">HttpContext.Current = MockHelper.FakeHttpContext();</code>
このアプローチでは、単体テスト中に null 参照例外が発生することなく値を HttpContext.Current.Session
に設定できるため、Web サービスのセッション依存の機能を徹底的にテストできます。
以上がHttpContext.Current.Session を使用する Web サービスの単体テスト時に NullReferenceExceptions を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。