首頁 >後端開發 >C++ >如何模擬 HttpContext.Current 進行有效的 ASP.NET MVC 單元測試?

如何模擬 HttpContext.Current 進行有效的 ASP.NET MVC 單元測試?

Barbara Streisand
Barbara Streisand原創
2025-01-17 03:01:09322瀏覽

How Can I Mock HttpContext.Current for Effective ASP.NET MVC Unit Testing?

在單元測試中模擬 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn