需要用户登录的UnitTest ASP.NET应用程序

Tyl*_*itt 5 asp.net authentication unit-testing

我有一个允许用户登录的ASP.NET应用程序.我的应用程序的另一部分使用UserId(用户必须登录才能访问控制器).如何伪造单元测试登录?

以下是我获取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
Run Code Online (Sandbox Code Playgroud)

谢谢

编辑

这是一个MVC 3项目.

zer*_*ro7 5

您可以为您的成员编写一个包装类,这样您就可以创建一个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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果你没有在你的模拟中做复杂的事情,我可能会使用moq,所以你在单元测试中根本不需要模拟类.

var mock = new Mock<IMyMemberShip>();
mock.Setup(m => m.GetUserId()).Returns(Guid.NewGuid());
Run Code Online (Sandbox Code Playgroud)