私は ASP.NET MVC アプリケーションに取り組んでおり、コントローラー アクションに対していくつかの単体テストを作成しようとしています。そのうちのいくつかは、Session、Request.Cookies、Response.Cookies などの HttpContext のプロパティを操作します。 「アレンジ、アクト、アサート」の方法を理解するのに苦労しています...アレンジとアサートを見ることができます...しかし、モックされた HttpContextBase のプロパティですべてのプロパティを「アクト」する方法を理解するのに問題がありますゲッターしかありません。コントローラー アクション内からモック コンテキストに何も設定できないので、あまり役に立ちません。私は嘲笑にかなり慣れていないので、何かが欠けていると確信しています。プロパティ値、そして後でそれらがまだ私が設定したものであるか、またはそのようなものであることをアサートします。私は何が欠けていますか?
public static HttpContextBase GetMockHttpContext()
{
var requestCookies = new Mock<HttpCookieCollection>();
var request = new Mock<HttpRequestBase>();
request.Setup(r => r.Cookies).Returns(requestCookies.Object);
request.Setup(r => r.Url).Returns(new Uri("http://example.org"));
var responseCookies = new Mock<HttpCookieCollection>();
var response = new Mock<HttpResponseBase>();
response.Setup(r => r.Cookies).Returns(responseCookies.Object);
var context = new Mock<HttpContextBase>();
context.Setup(ctx => ctx.Request).Returns(request.Object);
context.Setup(ctx => ctx.Response).Returns(response.Object);
context.Setup(ctx => ctx.Session).Returns(new Mock<HttpSessionStateBase>().Object);
context.Setup(ctx => ctx.Server).Returns(new Mock<HttpServerUtilityBase>().Object);
context.Setup(ctx => ctx.User).Returns(GetMockMembershipUser());
context.Setup(ctx => ctx.User.Identity).Returns(context.Object.User.Identity);
context.Setup(ctx => ctx.Response.Output).Returns(new StringWriter());
return context.Object;
}