Тест Visual Studio может проверять ожидаемые исключения, используя атрибут 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()
Компилятор выдаст следующую ошибку:
Аргумент атрибута должен быть постоянное выражение, выражение typeof или выражение создания массива Атрибут
Кто-нибудь знает, как тестировать исключение, имеющее сообщение из файла ресурсов?
Один из вариантов, который я рассмотрел, - это использование настраиваемых классов исключений, но на основе часто слышимых советов, таких как:
"Создавать и создавать пользовательские исключения если у вас есть условие ошибки, могут быть программно обработаны в иначе, чем любые другие существующие исключение. В противном случае бросьте один из существующие исключения." Источник
Я не собираюсь обрабатывать исключения по-разному в обычном потоке (это критическое исключение, поэтому я все равно попаду в панический режим), и я не думаю, что создание исключения для каждого тестового примера - это правильная вещь для делать. Любые мнения?