2012-02-14 15 views
4

Assertが失敗した後にテストを終了する簡単な方法があるのだろうかと思います。私たちはすべての自動テストでGalileoを使用していましたが、Visual Studio Testフレームワークを移行しました。私たちには、テストを失敗させる方法がありましたが、続けています。MSTEST - Assertが失敗した後に続行する

 public static bool DoAssertAndContinue(Action assert) 
    { 
     try 
     { 
      assert(); 
      return true; 
     } 
     catch (AssertionException ae) 
     { 
      ConfigContext.WriteLine(ae.Message); 
      return false; 
     } 
    } 

これは、我々が以前に使用したものである...そして、それはこのように呼ばれることになります。

assertionResults.Add(Automation.Utils.CommonMethods.DoAssertAndContinue(() => Assert.IsTrue(detail.ValidateName(boo, urns)))); 

私はちょうど私たちがすることなく、前に持っていたものをエミュレートするための最良の方法を把握しようとしています私たちのすべてのテストをリファクタリングします。

答えて

4

アサーション例外の代わりに、すべてのmstestアサーションの失敗の基本例外であるUnitTestAssertExceptionをキャッチする必要があります。

+0

これは私のために働いた。私はそれをUntiTestExceptionに変更し、現在正しく動作しています。私は現在、完全なスタックレポートを追加する作業を進めています。 – Woundedbear

0

MsTestフレームワークは、失敗したアサーションで例外をスローします。ユニットテストメソッドからの伝播は、テストが失敗する原因です。アサーションに失敗した場合は、その例外を処理してメソッドをエスケープしないでください。

+0

私はこれで少し混乱していると思います。ここで正しく例外をキャッチしていませんか?メソッドをエスケープしないように正しくキャッチする例は何ですか? – Woundedbear

1

MSTestでもTry/Catchを使用することができます。 Catchブロックでは、特定のエラーをキャッチしてConsole.Writeを使用して出力し、エラーについて知ることができます。詳細はthreadをご覧ください。

EDIT 1:個人的に私はテストメソッドを渡すためにtry/catchを使用しません。私は実際の製品に欠陥を見つけるためのテスト方法を書いています。だからあなたの呼び出しメソッドがあなたにいくつかの特定の例外を与えることを期待しているなら、私はExpectedException属性を使うことを提案します。これは、単一のテストデータに対してテストメソッドを実行している場合に適用されます。

ここで、複数のテストデータをテストメソッドに渡す場合。次に、データ駆動のテストケースを提案します。ここでは、すべてのテストデータをXMLまたはXLSまたはDBに保存できます。その入力ファイルを使用して、複数のテストデータをテストメソッドに渡すことができます。ここでtry/catchを使用しないでください。呼び出しメソッドが例外を送信し、MSTestがそれを処理して次のテストデータに移動するかどうかを確認する場合は、テストデータに使用しないでください。テスト結果ウィンドウに移動すると、その特定のテストデータが失敗した理由がわかります。データ駆動型のコンセプトについてはこちらlink

+0

私はこれで少し混乱していると思います。ここで正しく例外をキャッチしていませんか?メソッドをエスケープしないように正しくキャッチする例は何ですか? – Woundedbear

+0

私の答えを更新しました。これがあなたを助けることを願っています。 –

関連する問題