2009-04-17 4 views
2

私は実行されているテスト方法を持っています。メソッドが例外を生成するとき、私はテストの名前と例外の内容を知りたい。NUnitテスト中のteardownイベントでは、単にテストされたメソッドに適用される属性にどのようにアクセスできますか?

テストのティアダウンでこの情報にアクセスしたいと思います。帰属するメソッド[TearDown]からどのようにアクセスできますか?

答えて

0

オプション1:私はできないと思います。それとも、私はあなたができることを知らない。私がこの必要性に近づく方法は、特定のテストでtry/catchを使用し、例外で何をしたいのかを行い、テストが失敗するようにcatchブロック内に再度スローします。

try{ 
    // do something that can potentially throw; 
} 
catch(Exception ex){ 
    // do something interesting with the ex; 
    throw; 
} 

OPTION 2:あなたはあまりにも遠くに沿って行っていませんでした場合は、別の例外期待モデルを持っており、あなたが探しているコントロールの一部を提供することができるのxUnitを使用することもできます。

2

nunitには良い方法が組み込まれているとは思えませんが、解決するのは難しい問題ではありません。 try/catchブロックでテストをラップし、例外をキャッチしてテストクラスのprivateメンバー変数に保存します。その後、TearDownメソッドからアクセスできます。

特に優雅ではありませんが、機能します。

1

もう1つの解決策は、テンプレートメソッドを使用し、このメソッドを使用してすべてのテストを実行することです。例えば:あなたのテストは、テスト前に初期化とテスト(例えば、一時ファイル)の後に処分しなければならないいくつかのリソースを使用する場合

// template method 
void Execute(Action test) 
{ 
    try 
    { 
     test(); 
    } 
    catch (Exception e) 
    { 
     // handle exception here 
     throw; 
    } 
} 

[Test] 
public void Test() 
{ 
    Execute(() => 
     { 
      // your test here 
     }); 
} 

このパターンは特に便利です。その場合、テストデリゲートで型パラメータを使用できます。

もう一つの利点は、あなたが簡単に

欠点は明らかであるなど異なる文化を使用して、別のスレッド上のテスト実行をさせることができるということです。それはすべてのテストにラムダメソッドを使用することができ強制します。

0

あなたは、私がそれをサポートする最初だったしないバージョンが、鉱山は24

ある方法

[TearDown] 
public void TestTearDown() 
{ 
    // inc. class name 
    var fullNameOfTheMethod = NUnit.Framework.TestContext.CurrentContext.Test.FullName; 
    // method name only 
    var methodName = NUnit.Framework.TestContext.CurrentContext.Test.Name; 
    // the state of the test execution 
    var state = NUnit.Framework.TestContext.CurrentContext.Result.State; // TestState enum 
} 

を取り壊すテストでテキストコンテキストがオブジェクトにアクセスすることができます

関連する問題