Исключение модульного теста ASP.Net MVC - PullRequest
0 голосов
/ 11 февраля 2010

Я использую инфраструктуру 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;
        }

Я закомментировал проблемные строки, которые, казалось, исправили это, но я все еще не уверен, что эти строки должны были делать и почему они вызывали ошибку.

1 Ответ

0 голосов
/ 11 февраля 2010

См. Раздел ОБНОВЛЕНИЕ выше, если вы следуете примеру, приведенному в ссылке выше, и удалите конкретные строки, закомментированные выше, это, похоже, решит проблему, если все, что вам нужно, это подделать UrlReferrer, что я был после. Не уверен, как это повлияет на остальную часть фальшивого httpContext, так как я точно не знаю, для чего предназначались эти строки.

...