Mock HttpContext.Current.Session in Unit-Tests
Beim Schreiben von Komponententests für einen Webdienst, der auf einen HttpContext.Current.Session
-Wert zugreift, kann eine Nullreferenzausnahme auftreten, wenn die Sitzung nicht initialisiert wird. Um dieses Problem zu lösen, können Sie Scheinsitzungen für Unit-Tests verwenden.
Eine Möglichkeit besteht darin, einen Schein HttpSessionStateContainer
mit einem neuen HttpContext
zu erstellen. So geht's:
<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>
Alternativ können Sie, wie von Brent M. Spell vorgeschlagen, HttpSessionStateContainer
direkt an HttpContext
anhängen:
<code class="language-csharp">SessionStateUtility.AddHttpSessionStateToContext(httpContext, sessionContainer);</code>
Verwenden Sie diese Scheinsitzung in Unit-Tests:
<code class="language-csharp">HttpContext.Current = MockHelper.FakeHttpContext();</code>
Mit diesem Ansatz kann der Wert während des Unit-Tests auf HttpContext.Current.Session
gesetzt werden, ohne dass eine Nullreferenzausnahme auftritt, sodass die sitzungsabhängige Funktionalität des Webdienstes gründlich getestet werden kann.
Das obige ist der detaillierte Inhalt vonWie kann ich NullReferenceExceptions beim Unittest von Webdiensten vermeiden, die HttpContext.Current.Session verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!