2016-05-12 5 views
2

例外を検証しようとしていますが、メッセージが返されましたが、このメッセージには変数があります。 1つの方法で単体テストを使ってそれを行うことは可能ですか?ExpectedExceptionのメッセージにプロパティを設定することはできますか?

public static string FileName 
     { 
      get 
      { 
       return "EXT_RF_ITAUVEST_201605091121212"; 
      } 
     } 

     [TestMethod()] 
     [ExpectedException(typeof(Exception), String.Format("Error on file {0}", FileName))] 
     public void ValidarNomeArquivo_DataNomeIncorreta_Mensagem() 
     { 
      throw new Exception(String.Format("Error on file {0}", FileName)); 
     } 

上記のコードは、「属性の引数は、属性パラメータ型の発現または配列生成式TYPEOF、定数式でなければなりません。」というエラーを返します。

+0

あなたが持っているコードは、「例外」が例外を正しくスローすることを検証しています。私は、あなたの/あなたのコードをテストしたいと思いますが、Microsoftのテストはしたくないと思います。この場合、ファイル名は通常どおりクラス/メソッドからスローされます。 – AlG

+0

データベースを読み込み、ファイル名とURLサービスを取得し、インスタンスを作成し、ファイル名をオブジェクトのプロパティとして渡すメソッドを呼び出すコンソールアプリケーションがあります。私が例外を投げる必要があるのは、コンソールアプリケーションが電子メールのログと送信を処理するためです。しかし、私が作成しているこのテスト方法は、ファイルの検証だけをテストすることなので、この時点ではすべてのプロセスが影響を受けていないと私は考えています。 –

答えて

2

あなたの状況で私はExpectedExceptionを使用せず、代わりに手動でロジックを実行します。

public static string FileName 
    { 
     get 
     { 
      return "EXT_RF_ITAUVEST_201605091121212"; 
     } 
    } 

    [TestMethod()] 
    public void ValidarNomeArquivo_DataNomeIncorreta_Mensagem() 
    { 
     //This try block must contain the entire function's logic, 
     // nothing can go after it to get the same behavor as ExpectedException. 
     try 
     { 
      throw new Exception(String.Format("Error on file {0}", FileName)); 

      //This line must be the last line of the try block. 
      Assert.Fail("No exception thrown"); 
     } 
     catch(Exception e) 
     { 
      //This is the "AllowDerivedTypes=false" check. If you had done AllowDerivedTypes=true you can delete this check. 
      if(e.GetType() != typeof(Exception)) 
       throw; 

      if(e.Message != String.Format("Error on file {0}", FileName)) 
       throw; 

      //Do nothing here 
     } 
    } 
+0

実際、このTestMethodが例外をスローすることを確認する必要があります。次に、ExpectedExceptionを挿入して!=信号を==に変更して、例外の型とメッセージを返すようにScott Chamberlainからソースを変更しました。 ありがとうございました。 –

+1

これは、例外が常にスローされることを確認するように修正されました。 tryブロックの末尾に 'Assert.Fail(')を置く必要があります。 –

+0

私はStackOverflowで新しいです。ここにコードを入れてみましょう。しかし、それは許可されていないと思います。 新しいException(String。書式( "ファイル{0}"のエラー、FileName)); ファイル名を検証するメソッドがあります ValidateFileName(IncorrectFileName); このメソッドでは、ファイル名が無効な例外をスローする必要があります。 もう一度Scottに感謝します –

関連する問題