2008-10-28 5 views
7

Я пытаюсь выполнить модульный тест фрагмента кода, который должен быть в настоящее время вошедшим в систему пользователем в тесте. Используя поставщик членства .Net 2.0, как я могу программно войти в систему как пользователь для этого теста?программный логин с провайдером членства .net

ответ

1

Действительно ли ваш код нужен пользователю, зарегистрированному через ASP.NET, или ему просто нужен CurrentPrincipal? Я не думаю, что вам нужно программно войти на ваш сайт. Вы можете создать GenericPrincipal, установить необходимые вам свойства и прикрепить его, например, Thread.CurrentPrincipal или издевательский HttpContext. Если вашему коду действительно требуется RolePrincipal или что-то еще, я бы изменил код, чтобы он был менее связан с членством ASP.NET.

+0

Мне нужен вызов Membership.GetUser() для возврата в данный момент вошедшего в систему пользователя. – ddc0660 2008-10-30 16:10:30

0

Использование вашего провайдера членства вы можете подтвердить использование пользователем Membership.ValidateUser. Затем вы можете настроить cookie аутентификации с помощью FormsAuthentication.SetAuthCookie. Пока у вас есть контейнер cookie, это должно позволить вам войти в систему.

2

Я нашел наиболее удобным создание одноразового класса, который обрабатывает настройку и сброс Thread.CurrentPrincipal.

public class TemporaryPrincipal : IDisposable { 
     private readonly IPrincipal _cache; 

     public TemporaryPrincipal(IPrincipal tempPrincipal) { 
      _cache = Thread.CurrentPrincipal; 
      Thread.CurrentPrincipal = tempPrincipal; 
     } 

     public void Dispose() { 
      Thread.CurrentPrincipal = _cache; 
     } 
    } 

В тестовом методе просто обернуть вызов с помощью заявления, как это:

using (new TemporaryPrincipal(new AnonymousUserPrincipal())) { 
    ClassUnderTest.MethodUnderTest(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^