首頁 >後端開發 >C++ >如何使用 Moq 在 ASP.NET MVC 單元測試中正確模擬 HttpContext?

如何使用 Moq 在 ASP.NET MVC 單元測試中正確模擬 HttpContext?

Linda Hamilton
Linda Hamilton原創
2025-01-11 20:46:15323瀏覽

How to Properly Mock HttpContext in ASP.NET MVC Unit Tests with Moq?

使用 Moq 在 ASP.NET MVC 單元測試中模擬 HttpContext

單元測試 ASP.NET MVC 控制器通常需要模擬 HttpContext 將程式碼與 Web 伺服器相依性隔離。 Moq 是一個強大的模擬框架,為模擬 HttpContext 及其屬性提供了強大的解決方案。

挑戰:

使用 Moq 直接嘲笑 HttpContext 會出現一個常見的陷阱:

<code class="language-csharp">[TestMethod]
public void Home_Message_Display_Unknown_User_when_cookie_does_not_exist()
{
    var context = new Mock<HttpContextBase>();
    var request = new Mock<HttpRequestBase>();
    context
        .Setup(c => c.Request)
        .Returns(request.Object);
    HomeController controller = new HomeController();

    // Error: HttpContext is read-only.
    controller.HttpContext = context.Object; 
    ...
}</code>

嘗試將模擬的 HttpContext 直接指派給控制器的 HttpContext 屬性會失敗,因為它是唯讀的。

解:

正確的方法是設定 ControllerContext 屬性。 ControllerContext 繼承自 HttpContext,提供必要的存取點:

<code class="language-csharp">controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);</code>

進一步閱讀:

有關使用 Moq 模擬 HttpContextRequestContext 的更多詳細信息,請參閱以下資源:

以上是如何使用 Moq 在 ASP.NET MVC 單元測試中正確模擬 HttpContext?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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