0

実際にはテストを行うように設計されていない 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"}にすると、後遺症は解決されますが、理由は解決されません。

4

0 に答える 0