Как вы выполняете авторизацию веб-страницы модульного тестирования с помощью ASP.NET MVC?
-
02-07-2019 - |
Вопрос
Допустим, у вас есть страница профиля, доступ к которой имеет только владелец этого профиля.Страница профиля находится по адресу:
Пользователь/Профиль/{userID}
Теперь я полагаю, что для предотвращения доступа к этой странице других пользователей вы можете структурировать функцию Profile вашего класса UserController для проверки личности текущего сеанса:
HttpContext.Current.User.Identity.Name
Если идентификатор совпадает с идентификатором в URL-адресе, продолжайте.В противном случае вы перенаправитесь на какую-то страницу с ошибкой.
Мой вопрос: как вы проводите модульное тестирование чего-то подобного?Я предполагаю, что вам нужно использовать какую-то инъекцию зависимостей вместо HttpContext в контроллере для проверки, но я не понимаю, как лучше всего это сделать.Любые советы будут полезны.
Решение 2
В итоге я выбрал «UserNameFilter», показанный в книге Кази Манзура. Сообщение блога.Работает как шарм и легко поддается модульному тестированию.
Другие советы
Ссылка выше хорошая.Я бы также добавил, что вместо программной проверки значения User.Identity.Name следует использовать атрибуты Authorize, как описано в статье:
http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx
Вероятно, вы можете сделать это, используя подделку для контекста контроллера.Ознакомьтесь с этой статьей: http://stephenwalther.com/blog/archive/2008/07/01/asp-net-mvc-tip-12-faking-the-controller-context.aspx
Вот тут-то и возникает насмешка с поддельным HttpContext.