Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何模拟httpcontext,使其在单元测试中不为null?_Asp.net Mvc 3_Unit Testing_Mocking_Moq_Httpcontext - Fatal编程技术网

Asp.net mvc 3 如何模拟httpcontext,使其在单元测试中不为null?

Asp.net mvc 3 如何模拟httpcontext,使其在单元测试中不为null?,asp.net-mvc-3,unit-testing,mocking,moq,httpcontext,Asp.net Mvc 3,Unit Testing,Mocking,Moq,Httpcontext,我正在编写一个单元测试,控制器方法正在抛出一个异常,因为HttpContext/ControllerContext为null。我不需要从HttpContext断言任何内容,只需要它不为NULL。我已经做了研究,我相信最小起订量就是答案。但我看到的所有样本对我帮助不大。我不需要做任何花哨的事情,只是为了模仿httpcontext。给我指出正确的方向 从一个类中获得这两个函数 public static class HttpContextFactory { public st

我正在编写一个单元测试,控制器方法正在抛出一个异常,因为HttpContext/ControllerContext为null。我不需要从HttpContext断言任何内容,只需要它不为NULL。我已经做了研究,我相信最小起订量就是答案。但我看到的所有样本对我帮助不大。我不需要做任何花哨的事情,只是为了模仿httpcontext。给我指出正确的方向

从一个类中获得这两个函数

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;
        }


    }
确保已在测试项目中安装:

Install-Package Moq

我知道这是一个比较老的主题,但是我们经常会模仿MVC应用程序进行单元测试

我只是想在升级到VisualStudio2013后,添加我使用MOQ4模拟MVC3应用程序的经验。没有一个单元测试在调试模式下工作,HttpContext在尝试查看变量时显示“无法计算表达式”


visual studio 2013在评估某些对象时出现问题。为了让调试模拟的web应用程序重新工作,我必须检查Tools=>Options=>debugging=>General settings中的“使用托管兼容性模式”。

我认为这篇文章会帮到你。知道了!这篇文章帮助很大:用两个方法创建了一个HttpContextFactory类。一个是模拟httpcontext,另一个是将当前控制器上下文设置为模拟数据。您应该在这里放置一些示例代码,概述您的解决方案,作为问题的答案。如果可以的话,一定要接受。
Install-Package Moq