UnitTest ASP.NET приложение, требующее входа пользователя в систему - PullRequest
5 голосов
/ 23 ноября 2011

У меня есть приложение ASP.NET, которое позволяет пользователям войти в систему. Другая часть моего приложения использует UserId (пользователь должен войти в систему для доступа к контроллеру). Как подделать логин для юнит-тестирования?

Вот как я могу получить идентификатор пользователя

Private _UserId As Guid
    Public ReadOnly Property UserId() As Guid
        Get
            _UserId = System.Web.Security.Membership.GetUser().ProviderUserKey
            Return _UserId
        End Get
    End Property

Спасибо

EDIT

Это проект MVC 3.

Ответы [ 5 ]

5 голосов
/ 30 ноября 2011

Вы можете написать класс-оболочку для вашего членства, чтобы вы могли создать Mock для использования в ваших модульных тестах.код написан на C #, я прошу прощения, но вы поймете мою точку зрения.

    public interface IMyMemberShip
    {
        Guid GetUserId();
    }

    public class MyMemberShip : IMyMemberShip
    {
        public Guid GetUserId()
        {
            return (Guid)System.Web.Security.Membership.GetUser().ProviderUserKey;
        }
    }

    public class MockMyMembership : IMyMemberShip
    {
        public Guid GetUserId()
        {
            return Guid.NewGuid();
        }
    }

    public class AnotherPartOfYourApplication
    {
        IMyMemberShip _myMembership;

        public AnotherPartOfYourApplication(IMyMemberShip myMemberShip)
        {
            _myMembership = myMemberShip;
        }

        public void GetUserIdAndDoSomething()
        {
            var userId = _myMembership.GetUserId();
        }
    }

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

var mock = new Mock<IMyMemberShip>();
mock.Setup(m => m.GetUserId()).Returns(Guid.NewGuid());
0 голосов
/ 29 ноября 2011

Вы можете написать собственный Fake ASP.NET Membership Provider или попробовать использовать TypeMock Isolator для эмуляции среды ASP.NET.

0 голосов
/ 23 ноября 2011

Вы также можете вызывать метод, который регистрирует пользователя при каждом модульном тесте.Вы можете даже просто добавить UserId() As Guid return Guid любого пользователя только для целей тестирования, если, конечно, вы не хотите протестировать саму функцию «Логин».

0 голосов
/ 29 ноября 2011

Скотт Хансельман имеет блог на эту тему:

Принципиальный пользователь ModelBinder в ASP.NET MVC для более простого (модульного) тестирования

Это не совсем то, что вы ищетедля, но это может привести вас к скорости.

0 голосов
/ 23 ноября 2011

FormsAuthentication.SetAuthCookie() - это метод, который FormsAuthentication использует для настройки регистрационной информации.

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