所以,我对这种单元测试很陌生,所以让我说这段代码:
public string GenerateToken(TbMtUser user)
{
JWTSettings jwtSettings = _jwtSettingsProvider.GetJWTSettings();
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
SecurityTokenDescriptor tokenDescriptor = new SecurityTokenDescriptor()
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Sid, user.CdUser.ToString()),
new Claim(ClaimTypes.Email, user.DsMail),
new Claim(ClaimTypes.Name, user.DsUserName),
}),
Expires = _dateTimeProvider.GetTime().AddMinutes(15),
SigningCredentials = new SigningCredentials(
new SymmetricSecurityKey(Encoding.ASCII.GetBytes(jwtSettings.JWTKey)),
SecurityAlgorithms.HmacSha256),
Issuer = jwtSettings.Issuer,
Audience = jwtSettings.Audience
};
SecurityToken token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
如您所见,我根本没有抛出异常。但是,假设CdUser
是null
,则null
对象不能使用ToString()
方法,因此将引发异常。
尝试在DsMail
中使用DsUsername
或Claim
时也会发生同样的事情,即使user
本身也可能是null
,对吧?>
我的问题是:
我应该自己检查所有这些情况(例如在代码的开头)并引发异常,还是应该让代码执行并将其委托给该代码块内的其他组件?
我之所以这样问是因为,例如-Claim
抛出类型ArgumentNullException
的异常,为什么我会做类似的事情:
if (String.IsNullOrEmpty(user.DsMail)) throw ArgumentNullException("DsMail can't be null");
会不会是同一回事? 更重要的是,有必要吗? 我唯一能想到的就是为了完全控制正在发生的事情。
我希望我要解释的内容有意义。
我知道这可能对您中最有经验的人完全不了解,但是您怎么看?请纠正我。