Насмешка пользователя. Идентификационные данные в ASP.NET MVC

Я должен создать Модульные тесты на веб-сайт ASP.NET MVC 2.0. Сайт использует аутентификацию Windows.

Я читал на необходимости дразнить контекст HTTP за код, который имеет дело с HttpContext. Я чувствую, что начинаю разобраться с шаблоном DI также. (Дайте классу атрибут типа IRepository и затем передайте в Объекте репозитария при инстанцировании контроллера.)

То, что я не понимаю, однако, является надлежащим способом Дразнить Windows Principal object, доступный через Пользователя. Идентификационные данные. Эта часть HttpContext?

Какое-либо тело имеет ссылку на статью, которая демонстрирует это (или рекомендация для книги)?

Спасибо,

Trey Carroll

38
задан DaveRandom 25 February 2013 в 23:08
поделиться

2 ответа

Я использовал IoC, чтобы абстрагироваться от этого с некоторым успехом. Сначала я определил класс для представления пользователя, вошедшего в систему:

public class CurrentUser
{
    public CurrentUser(IIdentity identity)
    {
        IsAuthenticated = identity.IsAuthenticated;
        DisplayName = identity.Name;

        var formsIdentity = identity as FormsIdentity;

        if (formsIdentity != null)
        {
            UserID = int.Parse(formsIdentity.Ticket.UserData);
        }
    }

    public string DisplayName { get; private set; }
    public bool IsAuthenticated { get; private set; }
    public int UserID { get; private set; }
}

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

Затем я использую Ninject (выберите свой любимый IoC-контейнер, неважно) и создал привязку для IIdentity следующим образом:

Bind<IIdentity>().ToMethod(c => HttpContext.Current.User.Identity);

Затем внутри моего контроллера я объявляю зависимость в конструкторе:

CurrentUser _currentUser;

public HomeController(CurrentUser currentUser)
{
    _currentUser = currentUser;
}

IoC-контейнер видит, что HomeController принимает объект CurrentUser, а конструктор CurrentUser принимает IIdentity. Это автоматически разрешит зависимости, и вуаля! Ваш контроллер может знать, кто является текущим зарегистрированным пользователем. Мне кажется, что это довольно хорошо работает с FormsAuthentication. Возможно, вы сможете адаптировать этот пример для аутентификации Windows.

31
ответ дан 27 November 2019 в 03:38
поделиться

Скотт Хансельман показывает в своем блоге , как использовать IPrincipal и ModelBinder, чтобы упростить тестирование контроллера путем имитации IPrincipal.

10
ответ дан 27 November 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: