加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 06:58:59 所属栏目:asp.Net 来源:网络整理
导读:我有一个允许用户登录的ASP.NET应用程序.我的应用程序的另一部分使用UserId(用户必须登录才能访问控制器).如何伪造单元测试登录? 以下是我获取UserId的方法 Private _UserId As Guid Public ReadOnly Property UserId() As Guid Get _UserId = System.Web.S
我有一个允许用户登录的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

谢谢

编辑

这是一个MVC 3项目.

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读