私は最新の NUnit(3.2.0) をインストールしており、すべてのテストを並行して実行しています。望ましい動作のように見えるかもしれませんが、私はそれを求めていませんでした。実際、私のテストのいくつかが壊れました。スレッドに依存するいくつかの初期化が[OneTimeSetUp]
あり、NUnit にテストを順番に実行させるために何もできないようです。ドキュメントを読んだところ、デフォルトではテストは並行して実行されないと書かれていますが、実際には並行して実行されています。
さらに、次の属性を追加しようとしました: [assembly: Parallelizable(ParallelScope.None)]
— 運が悪い。
この動作を変更する方法を知っている人はいますか?
PS ReSharper で実行しましたが、MSVS アドインでも試しました。
UPD: MVVM Light DispatcherHelper.Initialize()
(内部[OneTimeSetUp]
) を使用して、後でいくつかのテストで使用されるディスパッチャー オブジェクトを格納しています。スレッドが (テストとセットアップ メソッドの間で) 異なる場合、テスト中のアクションが非同期で実行され、テストが失敗します。
さまざまなテストでスレッド ID を確認しましたが、それらはすべて異なります。
UPD2:ドキュメントからの抜粋:
NUnit 3.0 フレームワークは、アセンブリ内でテストを並行して実行できます。これは、Engine Parallel Test Execution とは完全に別の機能ですが、同じテスト実行で両方を使用することは可能です。
デフォルトでは、並列実行は行われません。属性は、並行して実行できるテストと、他のテストとの関係を示すために使用されます。
明示的に指定されるまで、アセンブリ内のテストを並行して実行してはならないという意味ではない場合、それはどういう意味ですか? [assembly: Parallelizable(ParallelScope.None)]
テストの並列実行に影響しないのはなぜですか?
UPD3:
質問への回答は以下にあるかもしれませんが、(私のように) に行き詰まっている場合は、DispatcherHelper.Initialize()
この初期化を から削除OneTimeSetUp
し、ディスパッチャーを使用するすべてのテストに次の行を追加する必要があります。
DispatcherHelper.Reset();
DispatcherHelper.Initialize();