2017-09-24 7 views
0

背景

ので、同様に、私は、ITestAction属性の中から、各テストの結果/結果を知ることが必要に働いているのNUnitフレームワーク拡張:NUnit TestContext.CurrentContextは並列テストで安全に使用できますか?

public class MyFrameworkExtensionAttribute : Attribute, ITestAction 
{ 
    public void BeforeTest(ITest test) 
    { /* Omitted, not relevant to this question */ } 

    public void AfterTest(ITest test) 
    { 
    var result = TestContext.CurrentContext.Result; 
    var resultIsSuccess = result.Outcome.Status == TestStatus.Passed; 
    // Then go on to do stuff with that resultIsSuccess variable 
    } 
} 

AfterTestの最初の行に注意してください。方法;私は静的参照を使用しています:TestContext.CurrentContextITestインターフェイスはテストの結果を公開しないので、テストコンテキストが唯一の方法であるようです。

そして今、私の質問の質問

- NUnitの3.xのは ParallelizableAttributeを経由して、並行してテストを実行する機能が含まれているため - 私は思ったんだけど:それは現在のテストのコンテキストへの静的な参照を使用しても安全ですか?ここで心配する必要があるスレッドセーフティ懸念はありますか?静的な参照に頼らずにテスト結果を得るためのより良い/より堅牢な方法がありますか?

重要な場合は、NUnitフレームワーク3.7.1を使用しています。

答えて

1

短い答え:はい。

中規模の回答:静的なプロパティですが、テストごとに固有の実際のコンテキストに簡単にアクセスするためにのみ使用します。

説明:TestContext.CurrentContextを使用するたびに新しいコンテキストが作成されます。新しいコンテキストはTestExecutionContext.CurrentContextの単なるラッパーなので高価な操作ではありません。現在の実行コンテキストは、nunitフレームワークのプラットフォームビルドによって異なる方法で維持されます。デスクトップ.N​​ETの場合は、CallContextを使用して格納します。

関連する問題