Должен ли я позволить коду выдавать исключения или самому? - PullRequest
0 голосов
/ 24 января 2019

Итак, я немного новичок в этом модульном тестировании, так что, скажем, у меня есть этот код:

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

Не было бы то же самоевещь?Что еще более важно, будет ли это необходимо?Единственная мысль, о которой я могу подумать, - это чтобы полностью контролировать происходящее.

Надеюсь, имеет смысл то, что я пытаюсь объяснить.

Я знаю, что это может быть чем-то совершенно неосведомленным с самыми опытными из вас, но что вы думаете?Пожалуйста, поправьте меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...