программный вход с провайдером .net - PullRequest
7 голосов
/ 28 октября 2008

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

Ответы [ 4 ]

13 голосов
/ 10 июля 2009
if(Membership.ValidateUser("user1",P@ssw0rd))
        {
            FormsAuthentication.SetAuthCookie("user1",true); 
}
2 голосов
/ 30 октября 2008

Я нашел наиболее удобным создание одноразового класса, который обрабатывает установку и сброс 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();
}
1 голос
/ 28 октября 2008

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

0 голосов
/ 28 октября 2008

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

...