使用ASP.NET Identity进行单元测试

teh0wner

我想知道如何继续使用IdentityUser而不需要使用UserManager(需要创建数据库等)的单元测试代码。如果这有任何区别,我还将使用带有工作单元的存储库模式。

如果有人可以为我提供更多细节和简单示例,我将不胜感激!

郝公

因此,如果您只是想为单元测试创​​建和存储IdentityUsers的某种方式,则可以创建一个TestUserStore并对该存储使用UserManager。

public class MemoryUser : IUser {
    private readonly IList<UserLoginInfo> _logins;
    private readonly IList<Claim> _claims;
    private readonly IList<string> _roles;

    public MemoryUser(string name) {
        Id = Guid.NewGuid().ToString();
        _logins = new List<UserLoginInfo>();
        _claims = new List<Claim>();
        _roles = new List<string>();
        UserName = name;
    }

    public virtual string Id { get; set; }
    public virtual string UserName { get; set; }

    /// <summary>
    /// The salted/hashed form of the user password
    /// </summary>
    public virtual string PasswordHash { get; set; }

    /// <summary>
    /// A random value that should change whenever a users credentials have changed (password changed, login removed)
    /// </summary>
    public virtual string SecurityStamp { get; set; }

    public IList<UserLoginInfo> Logins { get { return _logins; } }

    public IList<Claim> Claims { get { return _claims; } }

    public IList<string> Roles { get { return _roles; } }
}

public class MemoryUserStore : IUserStore<MemoryUser>, IUserLoginStore<MemoryUser>, IUserRoleStore<MemoryUser>, IUserClaimStore<MemoryUser>, IUserPasswordStore<MemoryUser>, IUserSecurityStampStore<MemoryUser> {
    private Dictionary<string, MemoryUser> _users = new Dictionary<string, MemoryUser>();
    private Dictionary<UserLoginInfo, MemoryUser> _logins = new Dictionary<UserLoginInfo, MemoryUser>(new LoginComparer());

    public Task CreateAsync(MemoryUser user) {
        _users[user.Id] = user;
        return Task.FromResult(0);
    }

    public Task UpdateAsync(MemoryUser user) {
        _users[user.Id] = user;
        return Task.FromResult(0);
    }

    public Task<MemoryUser> FindByIdAsync(string userId) {
        if (_users.ContainsKey(userId)) {
            return Task.FromResult(_users[userId]);
        }
        return Task.FromResult<MemoryUser>(null);
    }

    public void Dispose() {
    }

    public IQueryable<MemoryUser> Users {
        get {
            return _users.Values.AsQueryable();
        }
    }

    public Task<MemoryUser> FindByNameAsync(string userName) {
        return Task.FromResult(Users.Where(u => u.UserName.ToUpper() == userName.ToUpper()).FirstOrDefault());
    }

    public Task AddLoginAsync(MemoryUser user, UserLoginInfo login) {
        user.Logins.Add(login);
        _logins[login] = user;
        return Task.FromResult(0);
    }

    public Task RemoveLoginAsync(MemoryUser user, UserLoginInfo login) {
        var logs = user.Logins.Where(l => l.ProviderKey == login.ProviderKey && l.LoginProvider == login.LoginProvider).ToList();
        foreach (var l in logs) {
            user.Logins.Remove(l);
            _logins[l] = null;
        }
        return Task.FromResult(0);
    }

    public Task<IList<UserLoginInfo>> GetLoginsAsync(MemoryUser user) {
        return Task.FromResult(user.Logins);
    }

    public Task<MemoryUser> FindAsync(UserLoginInfo login) {
        if (_logins.ContainsKey(login)) {
            return Task.FromResult(_logins[login]);
        }
        return Task.FromResult<MemoryUser>(null);
    }

    public Task AddToRoleAsync(MemoryUser user, string role) {
        user.Roles.Add(role);
        return Task.FromResult(0);
    }

    public Task RemoveFromRoleAsync(MemoryUser user, string role) {
        user.Roles.Remove(role);
        return Task.FromResult(0);
    }

    public Task<IList<string>> GetRolesAsync(MemoryUser user) {
        return Task.FromResult(user.Roles);
    }

    public Task<bool> IsInRoleAsync(MemoryUser user, string role) {
        throw new NotImplementedException();
    }

    public Task<IList<Claim>> GetClaimsAsync(MemoryUser user) {
        return Task.FromResult(user.Claims);
    }

    public Task AddClaimAsync(MemoryUser user, Claim claim) {
        user.Claims.Add(claim);
        return Task.FromResult(0);
    }

    public Task RemoveClaimAsync(MemoryUser user, Claim claim) {
        user.Claims.Remove(claim);
        return Task.FromResult(0);
    }

    public Task SetPasswordHashAsync(MemoryUser user, string passwordHash) {
        user.PasswordHash = passwordHash;
        return Task.FromResult(0);
    }

    public Task<string> GetPasswordHashAsync(MemoryUser user) {
        return Task.FromResult(user.PasswordHash);
    }

    public Task SetSecurityStampAsync(MemoryUser user, string stamp) {
        user.SecurityStamp = stamp;
        return Task.FromResult(0);
    }

    public Task<string> GetSecurityStampAsync(MemoryUser user) {
        return Task.FromResult(user.SecurityStamp);
    }

    public Task DeleteAsync(MemoryUser user) {
        throw new NotImplementedException();
    }

    public Task<bool> HasPasswordAsync(MemoryUser user) {
        return Task.FromResult(user.PasswordHash != null);
    }
}

var manager = new UserManager<MemoryUser>(new MemoryUserStore())

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单元测试ASP.NET MVC5应用

来自分类Dev

使用Google测试进行单元测试

来自分类Dev

如何使用动态生成的ADO.NET实体数据模型代码进行单元测试

来自分类Dev

使用实体框架进行单元测试的单元测试

来自分类Dev

ASP.NET MVC5:对具有会话的控制器进行单元测试

来自分类Dev

单元测试Asp.Net WebApi:如何使用[FromUri]参数测试方法的正确路由

来自分类Dev

如何对ASP.NET 5 / MVC 6 Session进行单元测试?

来自分类Dev

asp.net单元测试路由映射扩展方法

来自分类Dev

如何使用ASP.NET 5(MVC 6)中的Response属性对控制器动作进行单元测试?

来自分类Dev

如何对ASP.Net MVC中采用对象数组并返回JsonResult的Action方法进行单元测试

来自分类Dev

在Asp.NET MVC中对ViewResult进行单元测试

来自分类Dev

如何使用MSTEST对ASP.NET CORE控制器进行单元测试并添加伪造品

来自分类Dev

如何对Akka.Net Actor状态进行单元测试(使用Begin())

来自分类Dev

如何对返回匿名对象的ASP.NET Core MVC控制器进行单元测试?

来自分类Dev

使用HttpContext.Current.User.Identity.GetUserId()对MVC模型进行单元测试

来自分类Dev

如何对ASP.NET Core Web应用程序(.Net Framework)进行单元测试?

来自分类Dev

如何在ASP.NET MVC多层应用程序中正确进行单元测试?

来自分类Dev

使用TryUpdateModel时的asp.net核心MVC控制器单元测试

来自分类Dev

注入ASP.NET Identity用户的依赖关系(以及单元测试)

来自分类Dev

如何在ASP.NET Core MVC中对RazorViewEngineOptions进行单元测试?

来自分类Dev

如何使用Moq对.NET Core 3.1中的LoggerMessage.Define()进行单元测试?

来自分类Dev

ASP.NET MVC:单元测试会话变量不变

来自分类Dev

使用Telerik Just Mock Lite进行Asp.NET MVC区域注册路由单元测试

来自分类Dev

如何对返回匿名对象的ASP.NET Core MVC控制器进行单元测试?

来自分类Dev

如何在ASP.NET MVC多层应用程序中正确进行单元测试?

来自分类Dev

在ASP.NET Web API中是否需要对连接到工作单元的存储库进行模拟以进行单元测试?

来自分类Dev

在 asp.net core 中单元测试 UserManager<IdentityUser>

来自分类Dev

Asp.Net Core WebApi:创建单元测试

来自分类Dev

使用 xunit 和 moq 进行 net core api 控制器单元测试

Related 相关文章

  1. 1

    单元测试ASP.NET MVC5应用

  2. 2

    使用Google测试进行单元测试

  3. 3

    如何使用动态生成的ADO.NET实体数据模型代码进行单元测试

  4. 4

    使用实体框架进行单元测试的单元测试

  5. 5

    ASP.NET MVC5:对具有会话的控制器进行单元测试

  6. 6

    单元测试Asp.Net WebApi:如何使用[FromUri]参数测试方法的正确路由

  7. 7

    如何对ASP.NET 5 / MVC 6 Session进行单元测试?

  8. 8

    asp.net单元测试路由映射扩展方法

  9. 9

    如何使用ASP.NET 5(MVC 6)中的Response属性对控制器动作进行单元测试?

  10. 10

    如何对ASP.Net MVC中采用对象数组并返回JsonResult的Action方法进行单元测试

  11. 11

    在Asp.NET MVC中对ViewResult进行单元测试

  12. 12

    如何使用MSTEST对ASP.NET CORE控制器进行单元测试并添加伪造品

  13. 13

    如何对Akka.Net Actor状态进行单元测试(使用Begin())

  14. 14

    如何对返回匿名对象的ASP.NET Core MVC控制器进行单元测试?

  15. 15

    使用HttpContext.Current.User.Identity.GetUserId()对MVC模型进行单元测试

  16. 16

    如何对ASP.NET Core Web应用程序(.Net Framework)进行单元测试?

  17. 17

    如何在ASP.NET MVC多层应用程序中正确进行单元测试?

  18. 18

    使用TryUpdateModel时的asp.net核心MVC控制器单元测试

  19. 19

    注入ASP.NET Identity用户的依赖关系(以及单元测试)

  20. 20

    如何在ASP.NET Core MVC中对RazorViewEngineOptions进行单元测试?

  21. 21

    如何使用Moq对.NET Core 3.1中的LoggerMessage.Define()进行单元测试?

  22. 22

    ASP.NET MVC:单元测试会话变量不变

  23. 23

    使用Telerik Just Mock Lite进行Asp.NET MVC区域注册路由单元测试

  24. 24

    如何对返回匿名对象的ASP.NET Core MVC控制器进行单元测试?

  25. 25

    如何在ASP.NET MVC多层应用程序中正确进行单元测试?

  26. 26

    在ASP.NET Web API中是否需要对连接到工作单元的存储库进行模拟以进行单元测试?

  27. 27

    在 asp.net core 中单元测试 UserManager<IdentityUser>

  28. 28

    Asp.Net Core WebApi:创建单元测试

  29. 29

    使用 xunit 和 moq 进行 net core api 控制器单元测试

热门标签

归档