我正在使用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;
}
我注意到问题行,似乎解决了问题,但我仍然不确定这些行应该做什么以及它们导致错误的原因。
答案 0 :(得分:0)
请参阅上面的更新部分,如果您按照上面链接中提供的示例并删除上面注释掉的特定行,那么如果您要查找的只是假冒UrlReferrer,这似乎可以解决问题,这就是我的意思之后。不确定这会如何影响假httpContext的其余部分,因为我不确定这些行的目的究竟是什么。