ASP.NET MVC 5-仅使用身份的单元测试服务

凯文·阿莫林

我有这个类,实际上,它仅在ASP.NET Identity之上进行操作。

 public class AuthenticationService : IAuthenticationService
    {
        private readonly ApplicationSignInManager _signInManager;
        private readonly ApplicationUserManager _userManager;
        private readonly IAuthenticationManager _authManager;
        private readonly HttpContextBase _context;

        public AuthenticationService(
            ApplicationSignInManager signInManager, 
            ApplicationUserManager userManager, 
            IAuthenticationManager authManager,
            HttpContextBase context)
        {
            _signInManager = signInManager;
            _userManager = userManager;
            _authManager = authManager;
            _context = context;
        }

        public async Task<SignInStatus> SignIn(string email, string password)
        {
            var result = await _signInManager.PasswordSignInAsync(email, password, true, shouldLockout: false);
            return result;
        }

        public async Task<IdentityResult> Register(string email, string password)
        {
            var user = new AppUser
            {
                UserName = email,
                Email = email,
            };

            var result = await _userManager.CreateAsync(user, password);

            return result;
        }

        public void SignOut()
        {
            _authManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
        }

        public async Task<IdentityResult> ForgotPassword(string email, string newPassword)
        {
            var user = await _userManager.FindByEmailAsync(email);
            string resetToken = await _userManager.GeneratePasswordResetTokenAsync(user.Id);
            var result = await _userManager.ResetPasswordAsync(user.Id, resetToken, newPassword);

            return result;
        }

        public async Task<AppUser> GetUserByEmail(string email)
        {
            var user = await _userManager.FindByEmailAsync(email);
            return user;
        }

        public string GetLoggedInUserId()
        {
            if(_context.User.Identity.IsAuthenticated)
            {
                return _context.User.Identity.GetUserId();
            }
            return string.Empty;
        }
    }

我不知道我是否注入了正确的依赖项。但是我的问题是:

在这样的课程中,对单元测试有意义吗?由于大多数方法都调用与身份相关的方法,并且仅返回结果。

唯一似乎正确的测试是,如果没有用户经过身份验证,当我尝试获取用户的ID时会发生什么。

卡桑德拉德

在几乎任何类中,您都可以测试,假设它是一个要测试的实体的单元测试,并且模拟了所有内部依赖项(例如ApplicationUserManagerIAuthenticationManager):

  1. 所有内部服务的准确次数
  2. 被测实体不会更改方法中传递的参数,而是将其正确传递给内部服务(如ApplicationUserManagerIAuthenticationManager)的调用

因此,举例来说,你可以测试SignIn_signInManager.PasswordSignInAsync被调用一次和论据是,emailpassword-一样,他们传递到SignIn; 对于第三个未命名的参数,以及shouldLockout-根据业务逻辑,它们是对还是错。

ForgotPassword比较棘手:您将数据从传递_userManager.FindByEmailAsync_userManager.GeneratePasswordResetTokenAsync,然后传递_userManager.ResetPasswordAsync
在这种情况下,您不需要测试这三个调用的结果是否正确,因为应该在测试中测试这件事_userManager,但是您将需要测试对所有这些服务的调用进行了正确的次数。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单元测试ASP.NET MVC5应用

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何在ASP.NET 5 / MVC 6中的单元测试中访问HttpContext

来自分类Dev

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

来自分类Dev

免费使用ASP .NET MVC 5

来自分类Dev

使用ASP.NET MVC 5身份进行单点登录

来自分类Dev

使用模型优先的ASP.NET MVC 5身份

来自分类Dev

使用ASP.NET MVC 5身份进行单点登录

来自分类Dev

带有路由数据的单元测试不适用于ASP.NET MVC 5 Web API

来自分类Dev

ASP MVC 5集成测试与使用SDK进行单元测试

来自分类Dev

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

来自分类Dev

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

来自分类Dev

SignalR ASP.NET MVC5身份

来自分类Dev

ASP.NET MVC 5身份和Azure

来自分类Dev

ASP.NET MVC5身份定制

来自分类Dev

MVC 5:Asp.net身份:如何对UserRole建模

来自分类Dev

覆盖Asp.net身份MVC5

来自分类Dev

SignalR ASP.NET MVC5身份

来自分类Dev

MVC 5:Asp.net身份:如何对UserRole建模

来自分类Dev

ASP.NET MVC5身份定制

来自分类Dev

ASP.NET MVC5身份实现

来自分类Dev

ASP NET MVC 5从服务器删除文件

来自分类Dev

ASP NET MVC 5从服务器删除文件

来自分类Dev

asp.net身份通过链接/ URL进行身份验证asp.net mvc 5

来自分类Dev

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

来自分类Dev

ASP.Net MVC:使用ValidationAttribute和IClientValidatable时如何编写单元测试代码

来自分类Dev

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

来自分类Dev

如何使用ASP.NET MVC 5的UserManager重置密码

Related 相关文章

热门标签

归档