2011-11-21 13 views
14

例外的にパラメータ名を調べているテストがあります。 MS TESTでこれをどのように書きますか?NUnitからMS TESTへのアサート例外

ArgumentNullException exception = 
       Assert.Throws<ArgumentNullException>(
          () => new NHibernateLawbaseCaseDataLoader( 
               null, 
               _mockExRepository, 
               _mockBenRepository)); 

Assert.AreEqual("lawbaseFixedContactRepository", exception.ParamName); 

私はテストでのtry catchブロックを使用して避けることができますので、私は滑らかな印象の方法を期待されています。

答えて

29
public static class ExceptionAssert 
{ 
    public static T Throws<T>(Action action) where T : Exception 
    { 
    try 
    { 
     action(); 
    } 
    catch (T ex) 
    { 
     return ex; 
    } 

    Assert.Fail("Expected exception of type {0}.", typeof(T)); 

    return null; 
    } 
} 

上記の拡張方法をテストヘルパーとして使用できます。ここでの使用例を次に示します。

// test method 
var exception = ExceptionAssert.Throws<ArgumentNullException>(
      () => organizations.GetOrganization()); 
Assert.AreEqual("lawbaseFixedContactRepository", exception.ParamName); 
+0

あなたの2番目のコードブロックでこの – cpoDesign

+0

を回避するのが好きですが、例外をチェックする方が正しいでしょうか?= null? – syclee

+0

残りの例外のためにもう1つのcatchブロックを追加することができます。「Expected exception was abc but xyz」と言います。 – Hash

3

MSTest [ExpectedException]属性はメッセージのテキストをチェックしないため、例外のMessage/ParamNameプロパティでAssertをキャッチして設定することをお勧めします。

7

恥知らずなプラグインは、私はAssert.Throws()構文を使用してアサート例外と例外メッセージMSTestを中に少しより簡単に読み取ることが可能になり、簡単な組み立てを書きましたnUnit/xUnitのスタイルです。

あなたは使用してNugetからパッケージをダウンロードすることができますPM>

MSTestExtensions・パッケージをインストールするか、あなたはここで完全なソースコードを参照することができます、https://github.com/bbraithwaite/MSTestExtensions

ハイレベルの命令をアセンブリをダウンロードし、継承BaseTestとなり、Assert.Throws()構文を使用できます。

public static void Throws<T>(Action task, string expectedMessage, ExceptionMessageCompareOptions options) where T : Exception 
{ 
    try 
    { 
     task(); 
    } 
    catch (Exception ex) 
    { 
     AssertExceptionType<T>(ex); 
     AssertExceptionMessage(ex, expectedMessage, options); 
     return; 
    } 

    if (typeof(T).Equals(new Exception().GetType())) 
    { 
     Assert.Fail("Expected exception but no exception was thrown."); 
    } 
    else 
    { 
     Assert.Fail(string.Format("Expected exception of type {0} but no exception was thrown.", typeof(T))); 
    } 
} 

詳細情報hereを:

のための主な方法は、次のように実装が見え例外。

+0

@joran私はこの質問へのあなたの有益な答えを待っています... –

+0

私は与えることはありませんが、私はあなたに感謝!私はあなたが私のコメントで嫌にならなかったことを願っています。 SOに関する私の専門知識は全く異なる分野にありますが、できる限り編集してより質の高い回答を投稿するよう奨励しています。それはすべて、他の人にとってはるかに貴重なリソースであるサイトに追加されます。 – joran

+0

@ヨラン十分な:) –

関連する問題