ASP.NET MVC コントローラーの単体テストでは、コードを Web サーバーの依存関係から分離するために HttpContext
のモックが必要になることがよくあります。 強力なモック フレームワークである 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 を使用した HttpContext
と RequestContext
のモックの詳細については、次のリソースを参照してください。
以上がMoq を使用して ASP.NET MVC 単体テストで HttpContext を適切にモックする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。