Visual Studio Test peut vérifier les exceptions attendues en utilisant l'attribut ExpectedException. Vous pouvez transmettre une exception comme ceci :
[TestMethod]
[ExpectedException(typeof(CriticalException))]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Vous pouvez également vérifier le message contenu dans l'ExpectedException comme ceci :
[TestMethod]
[ExpectedException(typeof(CriticalException), "An error occured")]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Mais lorsque je teste des applications I18N, j'utiliserais un fichier de ressources pour obtenir ce message d'erreur (je peux même décider de tester les différentes localisations du message d'erreur si je le souhaite, mais Visual Studio ne me permet pas de le faire :
[TestMethod]
[ExpectedException(typeof(CriticalException), MyRes.MultipleOrganisationsNotAllowed)]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Le compilateur donnera l'erreur suivante :
Un argument d'attribut doit être une expression constante, expression typeof ou une expression de création de tableau d'un attribut
Quelqu'un sait-il comment tester une exception dont le message provient d'un fichier de ressources ?
Une option que j'ai envisagée est l'utilisation de classes d'exceptions personnalisées, mais en me basant sur des conseils souvent entendus tels que :
"Créez et lancez des exceptions personnalisées si vous avez une condition d'erreur qui qui peut être traitée par programme d'une de manière différente de toute autre exception existante. Sinon, lancez l'une des exceptions existantes". Source :
Je ne m'attends pas à traiter les exceptions différemment dans le flux normal (il s'agit d'une exception critique, donc je passe en mode panique de toute façon) et je ne pense pas que créer une exception pour chaque cas de test soit la bonne chose à faire. Un avis ?