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
メソッドをオーバーライドすることが含まれます。これにより、モック化された HttpContext
を RequestContext
:
<code class="language-csharp">protected override void Initialize(RequestContext requestContext) { base.Initialize(requestContext); requestContext.HttpContext = context.Object; }</code>
Moq を使用した HttpRequestBase
と HttpContext
のモックに関する包括的なガイダンスについては、次の Microsoft ドキュメントを参照してください。
以上がMoq を使用して ASP.NET MVC で HttpContext を効果的にモックする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。