ASP.Net MVC单元测试异常

时间:2010-02-11 18:41:55

标签: asp.net asp.net-mvc unit-testing moq

我正在使用Moq框架进行单元测试。我正在按照这里列出的一些非常有用的说明来帮助我模拟httpcontext,特别是为了测试url referrer:

http://my6solutions.com/post/2009/08/18/Mocking-HttpContext-in-ASP-NET-MVC.aspx

一切似乎编译得很好,但是在运行测试时我得到以下错误:

  

System.Web.HttpException:无效使用   SimpleWorkerRequest构造函数。   应用程序路径无法覆盖   在这种背景下。请用   SimpleWorkerRequest构造函数   不会覆盖应用程序   路径..

在分析时,我发现错误似乎在以下行引发:

var wr = new SimpleWorkerRequest("", "", "", "", writer);

我不知道该怎么做。什么是SimpleWorkerRequest以及它如何在Moq中创建HttpContext?为什么我根据调试器使用它无效?

更新:以下是我从上面的网站上使用的完整方法

public static HttpContextBase FakeHttpContext()
        {
            var httpContext = new Mock<HttpContextBase>();
            var request = new Mock<HttpRequestBase>();
            var response = new Mock<HttpResponseBase>();
            var session = new Mock<HttpSessionStateBase>();
            var server = new Mock<HttpServerUtilityBase>();
            var cookies = new HttpCookieCollection();

            httpContext.Setup(x => x.Server).Returns(server.Object);
            httpContext.Setup(x => x.Session).Returns(session.Object);
            httpContext.Setup(x => x.Request).Returns(request.Object);
            httpContext.Setup(x => x.Response).Returns(response.Object);

            response.Setup(x => x.Cookies).Returns(cookies);
            httpContext.SetupGet(x => x.Request.Url).Returns(new Uri("http://www.csuci.edu"));
            httpContext.SetupGet(x => x.Request.UrlReferrer).Returns(new Uri("http://www.csuci.edu"));
            //var writer = new StringWriter();
            //var wr = new SimpleWorkerRequest("", "", "", "", writer);
            //HttpContext.Current = new HttpContext(wr);
            return httpContext.Object;
        }

我注意到问题行,似乎解决了问题,但我仍然不确定这些行应该做什么以及它们导致错误的原因。

1 个答案:

答案 0 :(得分:0)

请参阅上面的更新部分,如果您按照上面链接中提供的示例并删除上面注释掉的特定行,那么如果您要查找的只是假冒UrlReferrer,这似乎可以解决问题,这就是我的意思之后。不确定这会如何影响假httpContext的其余部分,因为我不确定这些行的目的究竟是什么。