在單元測試中模擬 HttpContext.Current
在對 ASP.NET MVC 應用程式進行單元測試時,需要模擬 HttpContext.Current
屬性呼叫傳回的 HttpContext.Current
。此屬性傳回 System.Web.HttpContext
的實例,它沒有擴展 System.Web.HttpContextBase
(用於模擬的類別)。
HttpContext.Current 與 HttpContextBase
引入 HttpContextBase
是為了解決 HttpContext
難以模擬的問題。但是,這兩個類別之間沒有關係,HttpContextWrapper
用作它們之間的適配器。
模擬 HttpContext 以實現共享存取
為了模擬 HttpContext
,使其在控制器和在 TestInitialize
方法中調用的任何庫之間共享,可以使用以下程式碼:
<code class="language-csharp">HttpContext.Current = new HttpContext( new HttpRequest("", "http://tempuri.org", ""), new HttpResponse(new StringWriter()) );</code>
設定使用者主體
要設定已登入用戶,請使用以下程式碼:
<code class="language-csharp">HttpContext.Current.User = new GenericPrincipal( new GenericIdentity("username"), new string[0] );</code>
將使用者設定為未登入
要模擬未經身份驗證的用戶,請使用:
<code class="language-csharp">HttpContext.Current.User = new GenericPrincipal( new GenericIdentity(String.Empty), new string[0] );</code>
透過這種方式修改 HttpContext.Current
,可以在整個測試設定中模擬它,確保控制器和任何依賴函式庫的行為一致。
以上是如何模擬 HttpContext.Current 進行有效的 ASP.NET MVC 單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!