実際にはテストを行うように設計されていない ASP.NET MVC 3 アプリの単体テストを作成していますが、実行する必要があります。テストの 1 つは、ログイン アクションをカバーする必要があります。基本的には、認証 Cookie を設定します。しかし、単体テストでは、次のことで失敗します。
at System.Boolean.Parse(String value)
at System.Web.Configuration.HttpCapabilitiesBase.CapsParseBool(String capsKey)
at System.Web.Configuration.HttpCapabilitiesBase.get_Cookies()
at System.Web.Security.CookielessHelperClass.UseCookieless(HttpContext context, Boolean doRedirect, HttpCookieMode cookieMode)
at System.Web.Security.FormsAuthentication.SetAuthCookie(String userName, Boolean createPersistentCookie, String strCookiePath)
at System.Web.Security.FormsAuthentication.SetAuthCookie(String userName, Boolean createPersistentCookie)
以下のこのメソッドでモックできるものはすべてモックし、実際の HttpContext を設定しました。
public void SetContext(Controller controller) {
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
var session = new Mock<HttpSessionStateBase>();
var server = new Mock<HttpServerUtilityBase>();
var user = new GenericPrincipal(new GenericIdentity("test"), new string[0]);
context.Setup(ctx => ctx.Request).Returns(request.Object);
context.Setup(ctx => ctx.Response).Returns(response.Object);
context.Setup(ctx => ctx.Session).Returns(session.Object);
context.Setup(ctx => ctx.Server).Returns(server.Object);
context.Setup(ctx => ctx.User).Returns(user);
request.Setup(r => r.Cookies).Returns(new HttpCookieCollection());
request.Setup(r => r.Form).Returns(new NameValueCollection());
request.Setup(q => q.QueryString).Returns(new NameValueCollection());
response.Setup(r => r.Cookies).Returns(new HttpCookieCollection());
var rctx = new RequestContext(context.Object, new RouteData());
controller.ControllerContext = new ControllerContext(rctx, controller);
}
私は何が欠けていますか?それについてすべてを読んでください。本当に役立つものは何もありません。ブラウザのプロパティを設定して Cookie をオフ{"cookies", "false"}
にすると、後遺症は解決されますが、理由は解決されません。