Как вы определили, если Assert.Throws<T>
не соответствует требованиям, единственная вещь OOTB в xUnit, с которой вы остаетесь, это использование Record.Exception
.
Как вы определили, основной способ сделать "Assert бросает что-нибудь" - это сделать
Assert.NotNull( Record.Exception( lambda ))
Посмотри на это - не красиво. Это вероятно по замыслу; В xUnit.net очень мало вещей, которые случайно (в отличие от тщательно продуманного и продуманного дизайна).
Record.Exception
возвращает результат по причине (и если бы вы использовали F #, вам пришлось бы |> ignore
, чтобы убрать значение). Вы всегда должны быть в состоянии Assert
что-то сказать о природе исключения, которое происходит , чтобы реальная проблема в вашем коде не была случайно проигнорирована, если вы со временем изменили свой код, что является причиной для всех это тестирование в первую очередь . Возможно, это может принять форму
var exception = Record.Exception( sut.Something );
Assert.True( typeof(SomeException).IsAssignableFrom( exception ) );
Глядя на это, безопаснее, чем Assert.NotNull()
, но все еще не чувствует себя хорошо. Пришло время, как уже говорилось в GOOS , , прослушать ваши тесты (а в случае самоуверенной тестовой среды - вашу тестовую среду).
Самая большая проблема в вашем вопросе заключается в том, что в реальном примере из реального теста всегда есть способ сделать ваш интерфейс более понятным или выразить ваши ожидания по-другому, поэтому реальный ответ - Mu .