vstest.console.exeでテストを行うときに、テストするクラスやメソッドを指定(フィルター)する

もくじ

目次(WPF/xaml/C#/C++関連メモ) - tera1707’s blog

やりたいこと

前回の「vstest.console.exeでUnitTestする」の記事で、コンソール(バッチ)でUnitTestを実行した。

そのときは、UnitTestプロジェクトの中に書いたテストを全部実行していたが、今回は全部実行はせずに、実行するテストをクラス単位、メソッド単位で指定して実行したい。

やり方

/Tests:[test name] オプションか、/TestCaseFilter:[expression] を使う。

下記が、前回記事で作ったテスト実行用バッチだが、そこの中のvstest.console.exeに上記オプションを与えることで指定をする。
※下記バッチは、TestsやTestacaseFilterのオプションはまだ入れてない

rem 対象のUnitTestのdll名
set TESTDLL="TestProject1.dll"

rem TestAgent2022のみインストールしている場合はこちら
set VSTESTPATH="C:\Program Files (x86)\Microsoft Visual Studio\2022\TestAgent\Common7\IDE\Extensions\TestPlatform\vstest.console.exe"
rem VisualStudio2022をインストールしている場合はこちらにもある
rem set VSTESTPATH="C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe"

rem テスト実行
%VSTESTPATH% %TESTDLL% /platform:x64 /inIsolation /Logger:trx
pause

前回コード、前回バッチの実行結果はこれ

f:id:tera1707:20220202232901p:plain

※ほかにも指定する方法あるっぽいが、自分が今回使ったものだけメモ。

オプション「/Tests:[test name]」を使う

vstest.console.exeに、/Tests:オプションで、実施するメソッド名を指定する。

%VSTESTPATH% %TESTDLL% /platform:x64 /inIsolation /Logger:trx /Tests:Test_A

実行結果はコレ。

f:id:tera1707:20220203220849p:plain

複数指定もできる。

%VSTESTPATH% %TESTDLL% /platform:x64 /inIsolation /Logger:trx /Tests:Test_A,Test2

オプション「/TestCaseFilter:[expression]」を使う

vstest.console.exeに、/TestCaseFilter:オプションで、いろんな指定の仕方ができる。

expressionの部分は、下記に書き方が載っている。

github.com

名前で指定

Name=で、名前が一致するテストを実行する。

%VSTESTPATH% %TESTDLL% /platform:x64 /inIsolation /Logger:trx /TestCaseFilter:"Name=Test_B"

Test_Bを実施。

名前の一部で指定

Name~で、指定の文字列を含む名前のテストを実行する。

%VSTESTPATH% %TESTDLL% /platform:x64 /inIsolation /Logger:trx /TestCaseFilter:"Name~Test_"

Test_ATest_Bを実施。

クラス名で指定

ClassName=で、指定のクラスの中に含まれるテストを実施する。
※namespace名を付けて書かないといけない。("ClassName=UnitTest1"だと見つからない)

%VSTESTPATH% %TESTDLL% /platform:x64 /inIsolation /Logger:trx /TestCaseFilter:"ClassName=TestProject1.UnitTest1"

UnitTest1クラスの中にあるTest_ATest_Bを実施。

その他

UnitTestのメソッドに、[Priority()][TestCategory()]アトリビュートを付けていると、それで指定もできる。

また、指定の条件は|&でつなげることもできる。

今回は試してないので、必要になったら試してみる。

参考

MS公式。VSTest.Console.exeのコマンドラインオプション。

docs.microsoft.com

MS公式。TestCase filterの書き方。

github.com

UnitTestの関連記事

qiita.com