テスト名でテストをフィルターする方法 – VSTest.Console.exe

こんにちは、Visual Studioサポートチームです。

今回は、Visual Studio 付属のツール VSTest.Console.exe の コマンド ライン オプションについてご紹介します。

VSTest.Console.exeはVisual Studio 2012 以降のバージョンで追加されたコマンドライン ツールであり、また、このツールを使用して、Visual Studioの単体テストやコード化された UIテストをコマンドラインから実行することが可能です。

VSTest.Console.exeには複数のコマンド ライン オプションが用意されています。

それらのオプションを使用することにより、実行するテストの構成の指定、テスト メソッドのフィルター、テストの一覧表示等がコマンドライン上で可能です。

VSTest.Console.exeのコマンド ライン オプションに関しては以下のMSDNドキュメントに関連のドキュメントがあります。

VSTest.Console.exe コマンド ライン オプション

https://msdn.microsoft.com/ja-jp/library/jj155796.aspx

 

今回はこれらのオプションを使用して、テスト名でテストをフィルターする方法についてご紹介します。

以下の2つのオプションを使用し、テストアセンブリに含まれるテストに対してフィルターをかけて特定のテストのみを実行することができます。

/Tests: オプション

/TestCaseFilter: オプション

/Tests: オプション

このオプションを使用する場合には、引数として渡す値と一致したテスト名に対してフィルターがかかり、テストアセンブリに含まれるテストのうち、フィルターされたテストのみを実行することが可能です。

コマンド オプション

/Tests: <テスト名>

例:

VSTest.Console.exe UnitTestProject1.dll /Tests:TestMethod1

--> UnitTestProject1.dll に含まれる ”TestMethod1" を含むテスト名をもつテストがフィルターされ、実行されます。

複数のテストを実行する場合には、フィルター式の条件として指定する値を区切り文字で分け、指定します。

VSTest.Console.exe UnitTestProject1.dll /Tests:TestMethod1、TestMethod2

/Tests: オプションの区切り文字については、Visual Studio 2012の場合と 2013で異なる文字の指定が必要となりますので、ご注意ください。

Visual Studio 2012 のVSTest.Console.exeの場合 > 、 (ユニコード U+3001)

Visual Studio 2013 のVSTest.Console.exeの場合 > , (ユニコード U+002C)

/Tests: オプションを使用した場合のフィルターは前方一致の検索となります。

 

/TestCaseFilter: オプション

このオプションを使用する場合には、テスト名でのフィルターに加え、TestCaseCategoryなどの設定可能な属性を使用し、特定のテストをフィルターすることが可能です。

/TestCaseFilter: オプションを使用したテスト名でのテストのフィルターでは以下の2つの属性を使用して実行することが可能です。

Name = <テスト名>

FullyQualifiedName = <テストの完全修飾名>

例:

VSTest.Console.exe UnitTestProject1.dll /TestCaseFilter: ”Name=TestMethod1”

--> UnitTestProject1.dll に含まれる ”TestMethod1" と合致するテスト名をもつテストがフィルターされ、実行されます。

VSTest.Console.exe UniTestProject1.dll /TestCaseFilter:”FullyQualifiedName=UnitTestProject1.UnitTest1.TestMethod1”

--> UnitTestProject1.dll に含まれる namespace が UnitTestProject1, class が UnitTest1, TestMethodが TestMethod1 であるテストがフィルターされ、実行されます。

複数のテストを実行する場合には、フィルター式の条件として指定する値を “|” を区切り文字として使用し、指定します。

例:

1). Name オプション

VSTest.Console.exe UnitTestProject1.dll /TestCaseFilter: ”Name=TestMethod1|Name=TestMethod2”

-->UnitTestProject1.dll に含まれる “TestMethod1”か “TestMethod2”に合致するテスト名をもつテストを実行します。

2). FullyQualifiedName オプション

VSTest.Console.exe UniTestProject1.dll /TestCaseFilter:”FullyQualifiedName=UnitTestProject1.UnitTest1.TestMethod1| UnitTestProject1.UnitTest1.TestMethod2”

-->UnitTestProject1.dll に含まれる 完全修飾名 “UnitTestProject1.UnitTest1.TestMethod1”か “UnitTestProject1.UnitTest1.TestMethod2”に合致するテスト名をもつテストを実行します。

/TestCaseFilter: オプションを使用し、属性と条件を = で結んだ場合には、完全一致の検索でフィルターを実行します。

/TestCaseFilter: オプションの属性の条件式で使用可能なその他の演算子は以下となります。

= (等しい)

!= (等しくない)

~ (含む)

& (AND)

| (OR)

( ) (括弧)

このように /TestCaseFilter:オプションを使用した場合、使用可能な属性や条件式の演算子の種類と数から /Tests:オプションを使用する場合より、より高度な検索が可能です。

また、/Tests: オプションと /TestCaseFilter: オプションでは同じテスト名を使用したフィルターでも使用される検索条件が異るので、この機能を利用する場合にはフィルターの要件に合わせ、適切なオプションを使用してください。

なお、/Tests: オプションと /TestCaseFilter: オプションは同時に使用することはできません。