Visual Studio Test может проверять наличие ожидаемых исключений, используя атрибут ExpectedException. Вы можете передать исключение следующим образом:
[TestMethod]
[ExpectedException(typeof(CriticalException))]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Вы также можете проверить сообщение, содержащееся в ExpectedException, например:
[TestMethod]
[ExpectedException(typeof(CriticalException), "An error occured")]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Но при тестировании приложений I18N я бы использовал файл ресурсов для получения этого сообщения об ошибке (любой может даже решить проверить различные локализации сообщения об ошибке, если я хочу, но Visual Studio не позволит мне сделать это:
[TestMethod]
[ExpectedException(typeof(CriticalException), MyRes.MultipleOrganisationsNotAllowed)]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Компилятор выдаст следующую ошибку:
Аргумент атрибута должен быть
константное выражение, выражение типа
или выражение для создания массива
атрибут
Кто-нибудь знает, как проверить исключение, содержащее сообщение из файла ресурсов?
Один вариант, который я рассмотрел, - это использование пользовательских классов исключений, но на основе часто встречающихся советов, таких как:
"Создавайте и выбрасывайте пользовательские исключения
если у вас есть условие ошибки,
может быть программно обработан в
иначе, чем любой другой существующий
исключение. В противном случае, бросьте один из
существующие исключения. " Источник
Я не собираюсь обрабатывать исключения по-другому в обычном потоке (это критическое исключение, так что я все равно перехожу в режим паники), и я не думаю, что создание исключения для каждого тестового примера - это то, что делать. Есть мнения?