2012-11-26 10 views
9

ReSharperに、プロジェクトのあるグループのテストを他のものより先に実行するように指示する方法はありますか?私はまだ並列実行が欲しいので、メソッドごとに制御する必要はありません。クラスごとに行うだけです。テストフレームワークは違いがあればMSTestです。ReSharperがユニットテストを実行する制御の順序

私がやりたい理由は、いくつかのテストは低いレベルで動作し、非常に高速ですが、他のテストはより高いレベルで動作し、はるかに低速です。私は速いテストが最初に走ってほしい。なぜなら、彼らが失敗すれば、何か間違っていることを知っているし、継続することに意味がないからだ。しかし、ReSharperは現在、私の遅いテストを最初に実行しています。

編集:テストは私のためにアルファベット順に実行されていません(VS 2010のR#7.1)。クラスごとに1つのソースファイルがあります。あるクラス内のテストは、メソッドがソースコードに現れる順番で実行されているようですが、R#がどのようにテストクラスの順序を決定するのか分かりません。遅いテストと速いテストが別々のクラスにあるので、それは私が後にしたものです。それはアルファベット順ではありませんが、実行ごとに一貫しています。

編集2: OK、理解しました(回答を参照)。

答えて

2

テストの実行はアルファベット順に.... だから、あなたの名前空間/クラス名をテスト順序に合わせて変更することができます。しかし、それはあなたのための選択肢ではないと思います。

別のオプションは、「ユニットテストセッション」ウィンドウでの異なるテストセッションにテストを追加することです。速いテストをセッション#1に、遅いテストをセッション#2に移動します。次に、必要なテストセッションを1回だけ実行します。

ないオプションカテゴリーによってユニットテストセッションウィンドウでテストあなたの試験方法(すなわち:[TestCategory("Fast"), TestMethod][TestCategory("Slow"), TestMethod])とグループにTestCategoryを追加することです。これはがありません。注文をテストします。

+0

ありがとう、私は名前空間とクラス名を変更することができましたが、私のためにアルファベット順ではありません - 編集を参照してください。テストセッションのアイデアは良いもの(+1)ですが、理想的ではないソリューションを開くたびに行う必要があることです。 – EM0

2

私はこれをしたい理由は、いくつかのテストが低レベル で動作し、非常に高速であるということですが、他のテストでは、より高いレベルで動作し、遅く くらいです。

私は、メソッドのカップルをお勧めします:

は、2つの別々のプロジェクトにテストを分割します。

YourProject.Test.Unit

に「速い」のテストを入れて、ゆっくりとテスト

YourProject.Test.Integration

統合テストでは、通常、他の成分と相互作用試験である(例えば、ネットワーク、データベース、ファイルシステム、など)、テストの実行が遅くなる可能性があります。より低速なテストが外部リソースにアクセスしている可能性があります(わからない)。

または@ therschさんの提案を使用してカテゴリを使用して、より遅いテストをマークしてください。私はあなたのテストは本当にすべての単体テストであるので、カテゴリメソッドを使用するので、それらを分割する意味がないでしょう。

+0

ありがとうございます。私は2つのプロジェクトに分割しないことを望んでいて、その場合でも、より高速なプロジェクトが最初に実行されることを確実にする方法はわかりません。 – EM0

4

これはちょっとハックしたようですが、プロジェクトから遅いテストでファイルを削除して再追加すると、最後に実行されることがわかりました。したがって、R#はテストクラスを含むソースファイルが追加され、その順序で実行される順序を追跡しているようです。 (ファイルを並べ替えるために.csprojファイルを編集しても効果はありませんでした。)

1

または、他のテストへの呼び出しを必要な順序で調整するTestを作成することができます - このテスト自体は "セッション"として機能します。

[TestMethod] 
public void A_RunAllTests() 
{ 
    Test1(); 
    Test2(); 
    . 
    . 

} 
+0

テストが失敗した場所は表示されません。失敗したテスト 'A_RunAllTests'をダブルクリックすると、実際のアサートではなく' Test1'または 'Test2'のいずれかに行きます。 – t3chb0t

1

ソリューションエクスプローラでのunittestのプロジェクト上で右をクリック> [追加]>あなたは、これはReSharperのからテストを命じ達することができないが、それはVSのテストエクスプローラに表示されます

..テストを命じました。あなたの注文したテストを特定のVSテストプレイリストに追加し、Resharper Session/Sessionsから関係するテストを削除します。

多くの定型文を保存するために、私は通常、データベースadd> get> edit> testでこの技法を使用し、[ClassCleanup]属性でクリーンアップメソッドを使用してテストのインサートのデータベースをスワイプします失敗します。

関連する問題