如何嘲笑的HttpContext,以便它不为空,从单元测试?(How to mock httpcon

2019-06-25 20:20发布

我写一个单元测试和控制方法是抛出一个异常,因为HttpContext的/ ControllerContext为空。 我不需要从HttpContext的断言什么,只需要它是不是NULL。 我已经做了研究,我相信起订量是答案。 但这一切,我所看到的样品都没有对我帮助很大。 我不需要做什么特别的,只是嘲笑的HttpContext。 点我在正确的方向!

Answer 1:

得到了这两个功能在这里的一类;

public static class HttpContextFactory
    {
        public static void SetFakeAuthenticatedControllerContext(this Controller controller)
        {

            var httpContext = FakeAuthenticatedHttpContext();
            ControllerContext context =
            new ControllerContext(
            new RequestContext(httpContext,
            new RouteData()), controller);
            controller.ControllerContext = context;

        }


        private static HttpContextBase FakeAuthenticatedHttpContext()
        {
            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 Mock<IPrincipal>();
            var identity = new Mock<IIdentity>();

            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.Object);
            user.Setup(ctx => ctx.Identity).Returns(identity.Object);
            identity.Setup(id => id.IsAuthenticated).Returns(true);
            identity.Setup(id => id.Name).Returns("a.ali174");

            return context.Object;
        }


    }

从单元测试我打电话给他们本身;

 HttpContextFactory.SetFakeAuthenticatedControllerContext(controller);

请确保您有起订量安装在您的测试项目:

Install-Package Moq


Answer 2:

我知道这是一个老话题,但惩戒了单元测试MVC应用程序是我们做的非常定期的东西。

我只是想升级到Visual Studio 2013年没有单元测试后加入我的经验用嘲讽起订量4 MVC 3应用程序在调试模式下进行工作,HttpContext的是试图展示在变量偷看时,“无法计算表达式” 。

原来的Visual Studio 2013有评估某些对象的问题。 为了得到调试工作再次嘲笑的Web应用程序,我必须勾选“使用托管兼容模式”,在工具=>选项=>调试=>基本设置。



文章来源: How to mock httpcontext so that it is not null from a unit test?