解決 ASP.NET MVC 單元測試的基類初始化中的 HttpContext.Current 模擬問題
單元測試 ASP.NET MVC 應用程式通常需要模擬 HttpContext.Current
來模擬使用者請求和回應。 當測試類別繼承自在初始化中使用 HttpContext.Current
的基底類別時,會出現一個常見問題。 僅僅模擬控制器本身的上下文是不夠的。
提供的範例示範了使用 HttpContext
和 FakeControllerContext
模擬控制器的 SetFakeControllerContext
。但是,如果基類的 Init
方法存取 HttpContext.Current
,則需要直接解決此問題。 為了確保一致的模擬,我們還必須在測試的初始化中模擬 HttpContext.Current
。
嘲笑HttpContext.Current
有效
我們可以透過替換 System.Web.HttpContext
和 IPrincipal
屬性來有效地模擬 IIdentity
類別。 以下程式碼片段說明了這一點:
<code class="language-csharp">HttpContext.Current = new HttpContext( new HttpRequest("", "http://tempuri.org", ""), new HttpResponse(new StringWriter()) ); // Simulate a logged-in user HttpContext.Current.User = new GenericPrincipal( new GenericIdentity("username"), new string[0] ); // Simulate a logged-out user HttpContext.Current.User = new GenericPrincipal( new GenericIdentity(String.Empty), new string[0] );</code>
透過在測試的初始化方法中實現此模擬策略,在調用基類的Init
方法之前,我們確保HttpContext.Current
被正確模擬,從而允許測試準確地模擬用戶交互並根據需要訪問HttpContext
。 這種方法保證了測試執行期間控制器和基底類別的行為一致。
以上是如何在 ASP.NET MVC 單元測試的基底類別初始化中模擬 HttpContext.Current?的詳細內容。更多資訊請關注PHP中文網其他相關文章!