2009-09-24 7 views

答えて

2

は、統合テストでない限り、危険なアイデアのように聞こえます。なぜテスト自体でそれをしないのですか?明らかにクラス内のプライベートフラグを設定することができました。

これは自分自身has suggestedあなたはこれを手動で行う場合のみ

+1

、私が持っているでしょう何らかのNUnit.CurrentTestContext APIが必要です。デバッグに失敗した場合、このフィクスチャに提供できる追加情報があるため、テストが成功したかどうかを知る必要があります。 –

2

をしなければならない場合Charlie Pooleものです。実際には、どのテストが実行されるのかわからないこともあります。 NUnit IDEでは、いくつかのテストを有効にしたり、いくつかのテストを無効にすることができます。あなたには、いくつかの特定のテストが実行されたかどうかを知りたい場合は、あなたのテストクラスでは、このようなコードを含めることができます

enum TestStateEnum { DISABLED, FAILED, SUCCEDED }; 
TestStateEnum test1State = TestStateEnum.DISABLED; 

[Test] 
void Test1() 
{ 
test1State = TestStateEnum.FAILED; // On the beginning of your test 
... 
test1State = TestStateEnum.SUCCEDED; // On the End of your Test 
} 

が次にあなたがtest1State変数を確認することができます。テストで例外がスローされた場合、SUCCEDEDは設定されません。あなたはまた少し違うロジックであなたのテストでtry catch finallyブロックに置くことができます:

+0

これは、どのテストが実行されたかを示す試みではなく、私が投げたい別のエラーです。より正確なスタックトレースを得ることができます。 –

-1

IMHOティアダウンロジックはテスト結果から独立している必要があります。

理想的には、セットアップとティアダウンを完全に、al xunit.netを使用しないでください。詳細は、hereを参照してください。

+0

原則として、絶対に行うべきことです。しかし私は、私のテストをBDDフレーバーできれいにまとめるのが好きです。時にはそれはラムダを介してgivensとassertを設定し、TearDownでそれらを実行することを意味します。問題は何らかの理由でセットアップまたはテスト本体が失敗した場合です。スタックトレースは混乱します。 –

25

これはすでに同様の質問にRan's answerで解決されています。引用するラン:

バージョン2.5.7以降、NUnitを使用すると、最後のテストが失敗したかどうかを検出することができます。 新しいTestContextクラスを使用すると、テストでTestStautを含む自分自身に関する情報にアクセスできます。詳細については

、あなたはNUnitの3.5との最後のテストの状態を検出するためのティアダウンを使用したい場合は、それがあるべきhttp://nunit.org/?p=releaseNotes&r=2.5.7

[TearDown] 
public void TearDown() 
{ 
    if (TestContext.CurrentContext.Result.Status == TestStatus.Failed) 
    { 
     PerformCleanUpFromTest(); 
    } 
} 
+0

リンクをありがとう。この質問はダビデの答えの1年半前に投稿されたことに注意してください。 –

+3

Nunit 3.xでは 'if(TestContext.CurrentContext.Result.Outcome == ResultState.Failure)'です。 – Lukas

4

を参照してください。動揺ザッツ

[TearDown] 
public void TearDown() 
{ 
    if (TestContext.CurrentContext.Result.Outcome.Status.Equals(TestStatus.Failed)) 
    { 
     //your code 
    } 
} 
関連する問題