ホームページ >バックエンド開発 >C++ >Moq を使用して ASP.NET MVC で HttpContext を効果的にモックする方法は?

Moq を使用して ASP.NET MVC で HttpContext を効果的にモックする方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-11 20:51:43209ブラウズ

How to Effectively Mock HttpContext in ASP.NET MVC with Moq?

Moq を使用した ASP.NET MVC での HttpContext のモック: 実践ガイド

Moq を使用して ASP.NET MVC コントローラーを単体テストする場合、HttpContext のモックは読み取り専用であるため課題が生じます。 モック化された HttpContext をコントローラーの HttpContext プロパティに直接割り当てようとすると、次の例に示すようにエラーが発生します。

<code class="language-csharp">[TestMethod]
public void Home_Message_Display_Unknown_User_when_coockie_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();
    controller.HttpContext = context.Object; // Error: Read-only property
}</code>

解決策は、代わりに ControllerContext を操作することです。 このアプローチにより、読み取り専用制約に違反することなく、基礎となる HttpContext へのアクセスが提供されます。 その方法は次のとおりです:

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

もう 1 つの効果的な方法には、ベース コントローラー内の Initialize メソッドをオーバーライドすることが含まれます。これにより、モック化された HttpContextRequestContext:

に注入できます。
<code class="language-csharp">protected override void Initialize(RequestContext requestContext)
{
    base.Initialize(requestContext);
    requestContext.HttpContext = context.Object;
}</code>

Moq を使用した HttpRequestBaseHttpContext のモックに関する包括的なガイダンスについては、次の Microsoft ドキュメントを参照してください。

以上がMoq を使用して ASP.NET MVC で HttpContext を効果的にモックする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。