10

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

私がこれをやりたい理由は、いくつかのテストは低レベルで動作し、非常に高速ですが、他のテストは高レベルで動作し、はるかに遅いためです。高速テストを最初に実行したいのです。失敗した場合は、何か問題があり、続行しても意味がないことがわかっているからです。ただし、ReSharperは現在、私の遅いテストを最初に実行します。

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

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

4

5 に答える 5

4

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

于 2012-11-27T04:10:01.530 に答える
2

これを行う理由は、一部のテストは低レベルで動作し、非常に高速ですが、他のテストは高レベルで動作し、はるかに遅いためです。

私はいくつかの方法を提案します:

テストを 2 つの個別のプロジェクトに分割します。「高速」テストを

YourProject.Test.Unit

そして遅いテスト

YourProject.Test.Integration

統合テストは通常​​、他のコンポーネント (ネットワーク、データベース、ファイル システムなど) と対話するテストであり、テストの実行が遅くなる可能性があります。遅いテストが外部リソースにアクセスしている可能性があります (それはわかりません)。

または、カテゴリを使用して遅いテストをマークするという @thersch の提案を使用します。あなたのテストは実際にはすべて単体テストであり、したがってそれらを分割することは意味がないので、カテゴリメソッドを使用します。

于 2012-11-26T10:21:37.253 に答える
2

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

もう 1 つのオプションは、[単体テスト セッション] ウィンドウで別のテスト セッションにテストを追加することです。高速テストをセッション #1 に移動し、低速テストをセッション #2 に移動します。次に、必要なテスト セッションを 1 つだけ実行します。

TestCategory をテスト メソッド (例: [TestCategory("Fast"), TestMethod]and [TestCategory("Slow"), TestMethod])に追加し、 Unit Test SessionsウィンドウでテストをCategoriesごとにグループ化することはできません。これはテスト順序には影響しません。

于 2012-11-26T10:01:22.473 に答える
1

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

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

}
于 2015-03-18T09:34:07.733 に答える
1

ソリューション エクスプローラーで UnitTest プロジェクトを右クリックし、[追加] > [順序付きテスト] をクリックします。

Resharper からこの順序付きテストにアクセスすることはできませんが、VS テスト エクスプローラーには表示されます。注文したテストを特定の VS テスト プレイリストに追加し、関連するテストを Resharper セッション / セッションから削除します。

多くのボイラープレートを節約するために、私は通常、データベースの追加>取得>編集>テストの削除でこの手法を使用し、[ClassCleanup]属性を使用してクリーンアップメソッドを使用して、テストの1つが失敗した場合にテスト挿入のデータベースをスワイプします。

于 2015-08-26T06:06:13.580 に答える