Возврат определенного UserHostAddress с использованием TestControllerBuilder - PullRequest
1 голос
/ 11 сентября 2010

Я использую MvcContrib и TestControllerBuilder для написания тестов для моего контроллера.

Я пишу тесты для моего контроллера обработки ошибок, которые выглядят так:

    public JsonResult HttpError()
    {
        Exception ex = null;

        try
        {
            ex = (Exception)HttpContext.Application[Request.UserHostAddress.ToString()];
        }
        catch
        {
        }

        if( ex != null )
        {
            return Json( new ErrorViewModel() { Message = ex.Message, Source = ex.Source, StackTrace = ex.StackTrace, Type = ex.GetType().Name}, JsonRequestBehavior.AllowGet );
        }
        else
        {
            return Json( new ErrorViewModel() { Message = "An error has occured." }, JsonRequestBehavior.AllowGet );
        }
    }

По сути, моя глобальная обработка ошибок помещает последнее исключение в хранилище приложений, и этот контроллер пытается извлечь его, преобразовать в Json и вернуть его (мы возвращаем все как Json, потому что эти методы вызывают только как Веб-сервисы).

Чтобы полностью проверить это, мне нужно, чтобы UserHostAddress содержал что-то предсказуемое, но объекты, установленные TestControllerBuilder, оставляют это свойство пустым.

Как я могу заставить эту работу? Я не уверен, как я могу сделать это в моем тесте.

1 Ответ

4 голосов
/ 13 сентября 2010

TestControllerBuilder использует Rhino.Mocks для насмешки над HttpContext. Зная это, вы можете вернуть объект Request в режим «записи» и заглушить ответ:

controller.Request.BackToRecord();
controller.Request.Stub(r => r.UserHostAddress).Return("75.142.12.45");
controller.Request.Replay();

Сделайте это после инициализации контроллера, но до вызова метода.

...