(Это не относится к Moq.) Я думаю, вы знаете, что вы добавили в свой код блок try...catch
, который поглощает исключение;но вы не понимаете, почему утверждение о том, что выбрано определенное исключение, сейчас не выполняется.В конце концов, вы все еще выбрасываете исключение, поэтому вам интересно, почему NUnit не замечает.
NUnit не работает, наблюдая за тем, что делает ваш код во время его выполнения.Единственный способ определить, было ли выброшено исключение, состоит в том, что это исключение всплывает в вызывающем коде (вызывающий код - это утверждение, что в методе test создается исключение).
Вы можете думать о своем утверждении, что ArgumentException
был брошен как catch(ArgumentException)
.И поскольку ваш новый код поглощает исключение, утверждение в тесте никогда не будет видеть исключение, поэтому утверждение не выполняется.
Как примечание, касающееся дизайнапосмотрите, как ведет себя ваш код, если выбрасывается это исключение.Вызывающий просто возвращает объект (как если бы он работал).Таким образом, вызывающий код не поймет, что что-то пошло не так (я бы сказал, что это плохой дизайн).
Вы можете использовать Moq, чтобы убедиться, что метод LogInformation был вызван один раз;но это могло быть вызвано другим исключением.
Стоит также отметить, что интересным вариантом является вызов LogInformation
для чего-то, что явно остановит работу программы.LogInformation для вещей, которые могут представлять интерес.Рассмотрите возможность использования другого метода на регистраторе, я бы предложил LogError или еще хуже.