Controller.User является нулевым во время модульного теста - PullRequest
2 голосов
/ 03 апреля 2012

У меня есть следующий код в методе действия моего контроллера:

if (User.Identity.IsAuthenticated)
{
    // ...
}

Кажется, он работает нормально.Но когда я запускаю модульный тест, который вызывает это действие, оно не выполняется, потому что User равно нулю?

Может кто-нибудь предложить лучший способ справиться с этим?Нужно ли реструктурировать этот код только для модульных тестов?

Ответы [ 3 ]

3 голосов
/ 03 апреля 2012

Возможно, вам нужно установить свойство User как часть вашей настройки.Вы могли бы сделать это, высмеивая HttpContextBase через ControllerContext, использованный для создания контроллера, чтобы он возвращал вашего поддельного пользователя.Установите свой смоделированный ControllerContext в свойстве ControllerContext, и он найдет User, если вы правильно настроили граф объектов.

2 голосов
/ 03 апреля 2012

Пользователь будет нулевым, если вы запустите код вне контекста веб-запроса.Похоже, вы запускаете тесты для своих методов напрямую.

У вас есть два варианта.

Самым быстрым решением вашей проблемы, но не обязательно самым устойчивым, было бы просто вызвать ваш работающий веб-сайт из модульного теста как WebRequest.

Более устойчивым решением было бы объединение используемых вами зависимых от контекста серверных функций (таких как User) в единый класс, который вы можете смоделировать / подделать.

Редактировать

Кто-нибудь может предложить лучший способ справиться с этим?Должен ли я реструктурировать этот код только для модульных тестов?

Суть в ответе "да".Что еще более важно, вы, вероятно, захотите, потому что это сделает вашу систему более гибкой и / или обслуживаемой в долгосрочной перспективе.

2 голосов
/ 03 апреля 2012

Свойство User класса Controller копируется из текущего HttpContext - вы должны предоставить контекст и установить там User, чтобы это работало в ваших модульных тестах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...