我应该让代码抛出异常还是我自己抛出异常?

时间:2019-01-24 20:03:34

标签: unit-testing testing automated-tests

所以,我对这种单元测试很陌生,所以让我说这段代码:

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);
}

如您所见,我根本没有抛出异常。但是,假设CdUsernull,则null对象不能使用ToString()方法,因此将引发异常。

尝试在DsMail中使用DsUsernameClaim时也会发生同样的事情,即使user本身也可能是null,对吧?

我的问题是:

我应该自己检查所有这些情况(例如在代码的开头)并引发异常,还是应该让代码执行并将其委托给该代码块内的其他组件?

我之所以这样问是因为,例如-Claim抛出类型ArgumentNullException的异常,为什么我会做类似的事情:

if (String.IsNullOrEmpty(user.DsMail)) throw ArgumentNullException("DsMail can't be null");

会不会是同一回事? 更重要的是,有必要吗? 我唯一能想到的就是为了完全控制正在发生的事情。

我希望我要解释的内容有意义。

我知道这可能对您中最有经验的人完全不了解,但是您怎么看?请纠正我。

0 个答案:

没有答案