Тесты контроллеров игнорируют глобальные фильтры в ASP.Net MVC? - PullRequest
1 голос
/ 31 июля 2011

Приложение ASP.Net MVC 3, которое я только начал писать, должно иметь аутентификацию для всех контроллеров, кроме AccountsController. Вместо того, чтобы украшать все мои контроллеры [Authenticate], я написал два пользовательских атрибута. Первое наследуется от AuthorizationAttribute и проверяет, украшено ли текущее действие другим, AllowAnonymous. Если это не так, он использует проверку подлинности с помощью форм, чтобы проверить, прошел ли текущий пользователь проверку подлинности, и перенаправляет на страницу входа, если нет.

Чтобы применить это ко всем контроллерам, я добавил свой собственный атрибут авторизации в GlobalFilterCollection в RegisterGlobalFilters в global.asax.cs.

Это все работает в браузере, но я был удивлен, когда запустил тесты по умолчанию, которые поставляются с интернет-приложением MVC, и увидел, что тест HomeControllerTest для домашней страницы прошел, и сказал, что текст "Welcome To ASP.NET MVC" был в ViewBag. Я ожидал, что этот тест не пройдёт, так как при просмотре в браузере это действие перенаправит на страницу входа, если пользователь не вошел в систему.

Мой подход к аутентификации неверен или мне нужно что-то написать в тестах, чтобы применить глобальные фильтры? Проведение юнит-тестов предполагает, что фильтры добавляются, но они не применяются так, как я ожидаю.

1 Ответ

2 голосов
/ 31 июля 2011

Ваш подход звучит хорошо.Однако вам нужно будет тестировать контроллеры и фильтры действий отдельно.См. следующий вопрос

...