Wie kann ich mit einer bestimmten Ausnahmemeldung aus einer Ressourcendatei in Visual Studio Test auf eine erwartete Ausnahme testen?

Visual Studio Test kann mithilfe des ExpectedException-Attributs nach erwarteten Ausnahmen suchen. Sie können eine Ausnahme wie diese übergeben:

[TestMethod]
[ExpectedException(typeof(CriticalException))]
public void GetOrganisation_MultipleOrganisations_ThrowsException()

Sie können auch wie folgt nach der in der ExpectedException enthaltenen Nachricht suchen:

[TestMethod]
[ExpectedException(typeof(CriticalException), "An error occured")]
public void GetOrganisation_MultipleOrganisations_ThrowsException()

Aber beim Testen von I18N-Anwendungen würde ich eine Ressourcendatei verwenden, um diese Fehlermeldung zu erhalten (jeder kann sogar beschließen, die verschiedenen Lokalisierungen der Fehlermeldung zu testen, wenn ich möchte, aber Visual Studio lässt mich dies nicht tun:

[TestMethod]
[ExpectedException(typeof(CriticalException), MyRes.MultipleOrganisationsNotAllowed)]
public void GetOrganisation_MultipleOrganisations_ThrowsException()

Der Compiler gibt den folgenden Fehler aus:

Ein Attributargument muss ein konstanter Ausdruck, ein Ausdruckstyp oder ein Ausdruck zur Array-Erstellung eines Attributs sein

Weiß jemand, wie man auf eine Ausnahme prüft, die eine Nachricht aus einer Ressourcendatei enthält?

Eine Option, die ich in Betracht gezogen habe, ist die Verwendung benutzerdefinierter Ausnahmeklassen, die jedoch auf häufig gehörten Ratschlägen basieren, z.

"Erstellen und werfen Sie benutzerdefinierte Ausnahmen, wenn Sie eine Fehlerbedingung haben, die programmgesteuert anders behandelt werden kann als jede andere vorhandene Ausnahme. Andernfalls werfen Sie eine der vorhandenen Ausnahmen."Quelle

Ich erwarte nicht, dass die Ausnahmen im normalen Ablauf unterschiedlich behandelt werden (es ist eine kritische Ausnahme, daher gehe ich sowieso in den Panikmodus), und ich denke nicht, dass es richtig ist, für jeden Testfall eine Ausnahme zu erstellen. Irgendwelche Meinungen?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage