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

标签 asp.net unit-testing authentication

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

这是我获取 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 项目。

最佳答案

您可以为您的成员资格编写一个包装类,以便您可以创建一个模拟以在单元测试中使用。代码是用 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());

关于asp.net - 需要用户登录的 UnitTest ASP.NET 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8234876/

相关文章:

c# - 如何创建模拟 HttpWebRequest 和 HttpWebResponse 对象

linux - 在软件中实现 802.1x 验证器?

c# - 按字符串属性对对象进行排序,最后为空字符串

asp.net - 两个外键引用相同的主键

c# - 如何从 c#.net 中的文本文件中删除空行

c# - 在 gridview Asp.Net 中使用下拉列表?

c++ - 是否可以将一段内存标记为 "out of bounds",以便堆管理器不从中分配内存?

c# - MSTest v2 有序测试

c# - 授权过滤器在我的 mvc 项目中不起作用

node.js - Google Oauth 给出代码兑换错误