web-dev-qa-db-ja.com

Visual Studioテストランナーで特定のテストを除外する方法

特定のテストについて、すべてのビルドで実行したくないという属性があります。テストのほとんどは通常の単体テストであり、すべてのビルドで実行してほしい。

つまり:カテゴリまたはプロジェクトタイプ別にテストを除外するにはどうすればよいですか?

たとえば、CodedUItestsを除外します。

[CodedUITest]
public class SearchViewTests

...または特定のTestCategoryのテストを除外します:

[TestMethod]
[TestCategory("Database Integration")]
public void ContactRepositoryGetByIdWithIdExpectCorrectContact()

他のすべてのテストは邪魔されることなくバックグラウンドで問題なく実行されますが、コード化されたUIテストは作業を続行する能力を妨げるため、特に除外します。

もともとこの質問はVisual Studio 2012に関するものでした。そのため、そのバージョン以降で機能するソリューションを希望します。

32
Fenton

機能することがわかった唯一の「解決策」(またはより良い回避策)は、「FullName」フィルターを指定することです。基本的に私は通常、私のソリューションを次のように構成します

  • ProjectA
  • ProjectA.UnitTests
  • ProjectA.IntegrationTests

等々。これで、テストエクスプローラーでFullName: "UnitTests"のように機能するフィルターを指定できます。
(検索名内で正規表現を使用できると期待していましたが、サポートされていないようです。)

enter image description here

8
Juri

TL; DRバージョン:

Test Explorer showing -Trait:"CategoryName" filter

他の回答では、回避策と最近のTraitsオプションの使用についてコメントしています。ただし、特性のテストを具体的に除外する方法はまったくわかりません。そのためには、単に-(マイナス)で検索ボックスのフィルターを無効にします。例:

-Trait:"DatabaseIntegration"

これにより、その特性を持つすべてのテストが除外されます。 これらの機能に関するMSDNドキュメント には次の説明があります。

フィルターの結果のサブセットを除外するには、次の構文を使用します。

FilterName:"Criteria" -FilterName:"SubsetCriteria"

例えば、

FullName:"MyClass" - FullName:"PerfTest"

名前に「PerfTest」も含むテストを除き、名前に「MyClass」を含むすべてのテストを返します。

64
Jeroen

Visual Studio 2012 Update 1 CTPは、プロジェクトおよびカテゴリー(特性)によるグループ化のサポートをテストエクスプローラーに追加しました。 http://blogs.msdn.com/b/visualstudioalm/archive/2012/10/08/visual-studio-2012-update-1-ctp.aspxhttp:// go.Microsoft.com/fwlink/?LinkId=268021

7
Todd King

ユニットテキストエクスプローラーで検索フィルターを使用できます。

unit test Explorer

2012に付属する新しいTest Exlorerでは、「テスト結果」、「ファイル名」などでテストをグループ化できますが、RTMビルドグループ/「TestCategory」による検索はありませんテストエクスプローラーから。ただし、VS2012のコマンドラインとTeamBuildには、TestCategory(TestCaseFilterを使用したVS 2012 RCでの選択的単体テストの実行)に基づくフィルターがあります。

彼らはVS開発チームのメンバーから、この欠けている機能の重要性を理解しました。それはバックログにあり、furutreビルド/アップデートで利用できるはずです。

詳細については、次のブログをご覧ください。 http://blogs.msdn.com/b/vikramagrawal/archive/2012/07/23/running-selective-unit-tests-in-vs-2012-rc-using -testcasefilter.aspx

3
Cybermaxs

テストエクスプローラーに適用できるフィルターがあります。 Trait: "UnitTest"このフィルターは、TestCategory( "UnitTest")属性を持つテストのみをピックアップし、他のテストは無視します。

3
Waldyr Felix

少し遅れてパーティーに私は同じ問題を抱えていましたが、ソリューションですべての単体テストを実行しているときにすべての開発者が破壊的なCodedUIに直面しました。私の回避策は、CodedUIプロジェクトのAssemblyInitializerに以下を追加することです。

    if(!ConfigurationManager.AppSettings["MachinesToRunCodedUI"].Split(',').Contains(Environment.MachineName))
        Assert.Inconclusive("CodedUI Tests are skipped.");

マシンがそのMachinesToRunCodedUIリストに含まれている場合のみ、CodedUIテストが実行されます。

1
Nick

この記事を見ましたか? 方法:テストカテゴリを使用して自動テストをグループ化して実行する

私はこれをVS 2012でまだ試していませんが、まだ有効である可能性があります。私が見る限り、TFSへの参照がないため、これは通常のVSテストランナーを指しているはずです。

0
Jens H