我正在为 ASP.NET MVC 3 应用程序编写单元测试,该应用程序实际上并不是为了进行测试而设计的,但应该完成。其中一项测试应涵盖登录操作。基本上它所做的就是设置一个 auth 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"}
只是解决了后果,但不是原因