Я использую инфраструктуру 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 и как он работает при создании HttpContext в Moq ?? Почему мое использование этого недействительно согласно отладчику ??
ОБНОВЛЕНИЕ: Вот полный метод, который я использую, взятый с сайта выше
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;
}
Я закомментировал проблемные строки, которые, казалось, исправили это, но я все еще не уверен, что эти строки должны были делать и почему они вызывали ошибку.