我有这个类,实际上,它仅在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时会发生什么。
在几乎任何类中,您都可以测试,假设它是一个要测试的实体的单元测试,并且模拟了所有内部依赖项(例如ApplicationUserManager
或IAuthenticationManager
):
ApplicationUserManager
或IAuthenticationManager
)的调用因此,举例来说,你可以测试SignIn
该_signInManager.PasswordSignInAsync
被调用一次和论据是,email
和password
-一样,他们传递到SignIn
; 对于第三个未命名的参数,以及shouldLockout
-根据业务逻辑,它们是对还是错。
ForgotPassword
比较棘手:您将数据从传递_userManager.FindByEmailAsync
到_userManager.GeneratePasswordResetTokenAsync
,然后传递到_userManager.ResetPasswordAsync
。
在这种情况下,您不需要测试这三个调用的结果是否正确,因为应该在测试中测试这件事_userManager
,但是您将需要测试对所有这些服务的调用进行了正确的次数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句