【发布时间】:2010-02-11 18:41:54
【问题描述】:
我正在使用 Moq 框架进行单元测试。我正在按照此处列出的一些非常有用的说明来帮助我模拟 httpcontext,特别是为了测试 url 引用:
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;
}
我注释掉了问题行,这似乎可以解决问题,但我仍然不确定这些行应该做什么以及为什么它们会导致错误。
【问题讨论】:
-
您可能需要公开更多代码才能了解它为什么不喜欢您正在做的事情...您能在有问题的行之前提供更多代码吗?
标签: asp.net asp.net-mvc unit-testing moq