0

我正在为 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"}只是解决了后果,但不是原因

4

0 回答 0