Как проверить наличие ожидаемого исключения с конкретным сообщением об исключении из файла ресурсов в Visual Studio Test?
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()
Компилятор выдаст следующую ошибку:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute
Кто-нибудь знает, как проверить исключение, которое имеет сообщение из файла ресурсов?
Одним из вариантов, который я рассмотрел, является использование пользовательских классов исключений, но на основе часто встречающихся рекомендаций, таких как:
"Do create and throw custom exceptions if you have an error condition that can be programmatically handled in a different way than any other existing exception. Otherwise, throw one of the existing exceptions." Source
Я не собираюсь обрабатывать исключения по-разному в обычном потоке (это критическое исключение, поэтому я все равно перехожу в режим паники), и я не думаю, что создание исключения для каждого тестового случая - это правильная вещь. Есть мнения?