W jaki sposób można przetestować oczekiwany wyjątek z określonym komunikatem wyjątku z pliku zasobów w programie Visual Studio Test?
Visual Studio Test może sprawdzać oczekiwane wyjątki za pomocą atrybutu ExpectedException. Możesz przekazać wyjątek taki jak ten:
[TestMethod]
[ExpectedException(typeof(CriticalException))]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Możesz również sprawdzić wiadomość zawartą w ExpectedException w następujący sposób:
[TestMethod]
[ExpectedException(typeof(CriticalException), "An error occured")]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Ale podczas testowania aplikacji I18N używałbym pliku zasobów, aby uzyskać ten komunikat o błędzie (każdy może nawet zdecydować się na przetestowanie różnych lokalizacji komunikatu o błędzie, jeśli chcę, ale Visual Studio nie pozwoli mi tego zrobić:
[TestMethod]
[ExpectedException(typeof(CriticalException), MyRes.MultipleOrganisationsNotAllowed)]
public void GetOrganisation_MultipleOrganisations_ThrowsException()
Kompilator poda następujący błąd:
Argument atrybutu musi być stałym wyrażeniem, typem wyrażenia lub wyrażeniem tworzenia tablicy atrybutu
Czy ktoś wie jak przetestować wyjątek, który ma wiadomość z pliku zasobów?
Jedną z rozważanych przeze mnie opcji jest użycie niestandardowych klas wyjątków, ale w oparciu o często słyszane porady, takie jak:
„Twórz i wyrzucaj niestandardowe wyjątki, jeśli masz warunek błędu, który można programowo obsługiwać w inny sposób niż jakikolwiek inny istniejący wyjątek. W przeciwnym razie wyrzuć jeden z istniejących wyjątków.”Źródło
Nie spodziewam się obsługiwać wyjątków inaczej w normalnym przepływie (jest to krytyczny wyjątek, więc i tak przechodzę do trybu paniki) i nie sądzę, aby tworzenie wyjątku dla każdego przypadku testowego było słuszne. Jakieś opinie?