Mock HttpContext.Current in der ASP.NET-Testinitialisierungsmethode
In ASP.NET ist das Verspotten des HttpContext-Objekts eine gängige Methode zum isolierten Testen von Controllern. Es gibt jedoch Situationen, in denen die Basistestklasse externe Bibliotheken initialisiert, die versuchen, auf HttpContext.Current zuzugreifen. Wenn der HttpContext in der Testinitialisierungsmethode nicht korrekt gemockt wird, tritt ein Fehler auf.
Lösung zur Simulation von HttpContext in der Initialisierungsmethode
Um dieses Problem zu lösen, ist es nicht nötig, HttpContextBase zu verspotten, da es nichts mit HttpContext.Current zu tun hat. Stattdessen können Sie den HttpContext direkt verspotten und als aktuellen Kontext festlegen:
<code class="language-csharp">// 在测试初始化方法中 HttpContext.Current = new HttpContext( new HttpRequest("", "http://tempuri.org", ""), new HttpResponse(new StringWriter()) );</code>
Sie können dann die User-Eigenschaft so einstellen, dass sie sich als der angemeldete Benutzer ausgibt:
<code class="language-csharp">// 用户已登录 HttpContext.Current.User = new GenericPrincipal( new GenericIdentity("username"), new string[0] ); // 用户已注销 HttpContext.Current.User = new GenericPrincipal( new GenericIdentity(String.Empty), new string[0] );</code>
Durch die Verwendung dieses Ansatzes wird sichergestellt, dass HttpContext.Current in der gesamten Testklasse verspottet wird, einschließlich der Initialisierungsmethode und aller Bibliotheken, die darauf zugreifen. Auf diese Weise können Sie Controller-Aktionen testen, die auf der HttpContext-Eigenschaft basieren, und gleichzeitig Abhängigkeiten initialisieren, die Zugriff auf den HttpContext erfordern.
Das obige ist der detaillierte Inhalt vonWie verspotte ich HttpContext.Current in ASP.NET-Testinitialisierungsmethoden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!