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()
コンパイラは次のエラーを出します:
属性引数は、属性の定数式、typeof式、または配列作成式である必要があります
リソースファイルからのメッセージがある例外をテストする方法を知っている人はいますか?
私が検討したオプションの1つは、カスタム例外クラスを使用することですが、次のようなよく聞かれるアドバイスに基づいています。
「他の既存の例外とは異なる方法でプログラムで処理できるエラー条件がある場合は、カスタム例外を作成してスローします。それ以外の場合は、既存の例外の1つをスローします。」ソース
通常のフローで例外を異なる方法で処理することは期待していません(これは重大な例外なので、とにかくパニックモードになります)。テストケースごとに例外を作成することは正しいことではないと思います。何か意見はありますか?