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

VSTest.Console.exe は、テストを実行するためのコマンド ライン ツールです。 コマンド ラインでは、任意の順序で複数のオプションを指定できます。 これらのオプションは、一般的なコマンド ライン オプションに記載されています。

手記

Visual Studio の MSTest アダプターは、互換性のためにレガシ モード (mstest.exeを使用したテストの実行と同等) でも動作します。 レガシ モードでは、TestCaseFilter 機能を利用できません。 アダプターは、testsettings ファイルが指定されている場合、forcelegacymoderunsettings ファイルで true に設定するか、HostTypeなどの属性を使用してレガシ モードに切り替えることができます。

ARM アーキテクチャ ベースのコンピューターで自動テストを実行するには、VSTest.Console.exeを使用する必要があります。

開発者コマンド プロンプト 開いてコマンド ライン ツールを使用するか、%Program Files(x86)%\Microsoft Visual Studio\<バージョン>\<Edition>\common7\ide\CommonExtensions\<Platform でツールを見つけることができます。 |Microsoft>.

一般的なコマンド ライン オプション

次の表に、 VSTest.Console.exe でよく使用されるオプションとその簡単な説明を示します。 コマンド ラインで「VSTest.Console/?」と入力すると、同様の概要を確認できます。 ここに記載されていない内部スイッチとレガシ スイッチを含む完全なリファレンスについては、 vstest.console.exe コマンド ライン オプション と vstest リポジトリの省略 されたスイッチ を参照してください。

オプション 形容
[テスト ファイル名] 指定したファイルからテストを実行します。 複数のテスト ファイル名をスペースで区切ります。
例: mytestproject.dllmytestproject.dll myothertestproject.exe
/Settings:[ファイル名] データ コレクターなどの追加の設定を使用してテストを実行します。 詳細については、「.runsettings ファイル を使用した単体テストの構成」を参照してください。
例: /Settings:local.runsettings
/Tests:[test name] 指定された値を含む名前でテストを実行します。 このコマンドは、名前空間を含む完全なテスト名と一致します。 複数の値を指定するには、コンマで区切ります。
例: /Tests:TestMethod1,testMethod2
/Tests コマンド ライン オプションは、/TestCaseFilter コマンド ライン オプションでは使用できません。
/Parallel テストを並列で実行することを指定します。 既定では、マシンで使用可能なすべてのコアを使用できます。 設定ファイルで使用するコアの数を構成できます。
/InIsolation 分離されたプロセスでテストを実行します。
この分離により、vstest.console.exe プロセスがテストのエラーで停止される可能性は低くなりますが、テストの実行速度が低下する可能性があります。
/TestAdapterPath:[path] テストの実行で、指定したパス (存在する場合) からカスタム テスト アダプターを使用するように、vstest.console.exe プロセスに強制します。
例: /TestAdapterPath:[pathToCustomAdapters]
/Platform:[プラットフォームの種類] 現在のランタイムから決定されたプラットフォームではなく、特定のプラットフォーム アーキテクチャを強制的に使用します。 値では大文字と小文字が区別されません。受け入れられる値は、 x86x64ARMARM64S390xPpc64leRiscV64、および LoongArch64です。
Windowsでは、x86 と x64 のみを確実に強制できます。ARMを指定すると、ほとんどのシステムで x64 になります。 有効な値の一覧にないランタイムで実行するには、このオプションを指定しないでください。
/Framework: [フレームワーク バージョン] テストの実行に使用する .NET バージョンをターゲットにします。
最新のフレームワークの短い形式は、NuGet フレームワーク パーサー ( net48net6.0net10.0 など) によって受け入れられ、解析されます ( .NETFramework,Version=v4.8.NETCoreApp,Version=v10.0などの長い形式も含まれます)。
従来のエイリアス Framework35Framework40Framework45FrameworkCore10FrameworkUap10 も受け入れられます。
TargetFrameworkAttribute は、アセンブリからこのオプションを自動的に検出するために使用され、属性が存在しない場合は既定で Framework40 されます。 TargetFrameworkAttribute を .NET Core アセンブリから削除する場合は、このオプションを明示的に指定する必要があります。
ターゲット フレームワークが Framework35として指定されている場合、テストは CLR 4.0 の "互換モード" で実行されます。
例: /Framework:net8.0
/TestCaseFilter:[] 指定された式に一致するテストを実行します。
<式> は、[| <>式<]>プロパティ<=>値の形式です。
例: /TestCaseFilter:"Priority=1"
例: /TestCaseFilter:"TestCategory=Nightly|FullyQualifiedName=Namespace.ClassName.MethodName"
/TestCaseFilter コマンド ライン オプションは、/Tests コマンド ライン オプションでは使用できません。
式の作成と使用の詳細については、「TestCase フィルター 参照してください。 シェルで直接フィルターを入力する場合は、シェル 内のフィルター式をエスケープするを参照してください。
/Environment:[NAME]=[VALUE] テスト ホスト プロセスの環境変数の値を設定します。 存在しない場合は変数を作成し、存在する場合はオーバーライドします。 このオプションは /InIsolation を意味し、分離されたプロセスでテストを強制的に実行します。 複数の変数を設定するには、このオプションを複数回指定します。 短い形式: /e
例: /e:VARIABLE1=VALUE1
/? 使用状況情報を表示します。
/Logger:[uri/friendlyname] テスト結果のロガーを指定します。 複数のロガーを有効にするには、パラメーターを複数回指定します。
例: Visual Studio テスト結果ファイル (TRX) に結果をログに記録するには、
/Logger:trx
[;LogFileName=<一意のファイル名の既定値>]
LogFileNameの代わりにLogFilePrefix=<prefix>を使用して、実行ごとに個別のタイムスタンプ付きファイルを保持します。 LogFileName は明示的な名前を設定し、前のファイルを上書きしますが、 LogFilePrefix は上書きしません。
詳細については、「 ログ記録の例」を参照してください。
/ListTests:[ファイル名] 特定のテスト コンテナーから検出されたテストを一覧表示します。 短い形式: /lt
注: /TestCaseFilter オプションは、テストを一覧表示する場合は無効です。どのテストを実行するかを制御するだけです。
/非難 テストを非難モードで実行します。 このオプションは、テスト ホストがクラッシュする原因となる問題のあるテストを分離する際に役立ちます。 クラッシュが検出されると、クラッシュ前に実行されたテストの順序をキャプチャするシーケンス ファイルが TestResults/<Guid>/<Guid>_Sequence.xml に作成されます。
クラッシュ ダンプやハング ダンプ ( /Blame:CollectDump;DumpType=full/Blame:CollectHangDump;TestTimeout=90m;HangDumpType=miniなど) を収集することもできます。 同等の dotnet test スイッチは、 --blame-crash--blame-hangです。
完全なオプション マトリックスとダンプ収集の要件については、「 データ コレクターのせいにする」を参照してください。
/Diag:[ファイル名] 診断トレース ログを指定したファイルに書き込みます。
トレース レベルを /Diag:<file name>;tracelevel=<off\|error\|warning\|info\|verbose> で設定します (既定値は verbose)。
/ResultsDirectory:[パス] テスト結果ディレクトリが存在しない場合は、指定されたパスに作成されます。
例: /ResultsDirectory:<pathToResultsDirectory>
/ParentProcessId:[parentProcessId] 現在のプロセスの起動を担当する親プロセスのプロセス ID。
/Port:[port] ソケット接続とイベント メッセージの受信用のポート。
/Collect:[dataCollector friendlyName] テスト実行のデータ コレクターを有効にします。 詳細情報.
@[file] 指定した応答ファイルから追加のオプションを読み取ります。 ファイル内の引数は空白 (スペースまたは改行) で区切られ、引用符がサポートされているため、オプションは複数行にまたがることができます。
例: vstest.console.exe @options.rsp

先端

オプションと値では、大文字と小文字は区別されません。

vstest.console.exe を実行するための構文は次のとおりです。

vstest.console.exe [TestFileNames] [Options]

既定では、テストが検出されない場合でも、正常に終了すると、コマンドは 0 を返します。 テストが検出されない場合にゼロ以外の値を返す場合は、<TreatNoTestsAsError>true</TreatNoTestsAsError> runsettings オプションを使用します。

次のコマンドは、テスト ライブラリ myTestProject.dllvstest.console.exe を実行します。

vstest.console.exe myTestProject.dll

次のコマンドは、複数のテスト ファイルを含む vstest.console.exe を実行します。 テスト ファイル名をスペースで区切ります。

vstest.console.exe myTestFile.dll myOtherTestFile.dll

次のコマンドは、いくつかのオプションで vstest.console.exe を実行します。 分離されたプロセスで myTestFile.dll ファイル内のテストを実行し、Local.RunSettings ファイルで指定された設定を使用します。 さらに、"Priority=1" とマークされたテストのみを実行し、結果を .trx ファイルに記録します。

vstest.console.exe myTestFile.dll /Settings:Local.RunSettings /InIsolation /TestCaseFilter:"Priority=1" /Logger:trx

次のコマンドは、テスト ライブラリ myTestProject.dll/blame オプションを使用して vstest.console.exe を実行します。

vstest.console.exe myTestFile.dll /blame

テスト ホストがクラッシュした場合、sequence.xml ファイルが生成されます。 このファイルには、クラッシュ時に実行されていた特定のテストまでの一連の実行で、テストの完全修飾名が含まれています。

テスト ホストのクラッシュがない場合、 sequence.xml ファイルは生成されません。

生成された sequence.xml ファイルの例:

<?xml version="1.0"?>
<TestSequence>
  <Test Name="TestProject.UnitTest1.TestMethodB" Source="D:\repos\TestProject\TestProject\bin\Debug\TestProject.dll" />
  <Test Name="TestProject.UnitTest1.TestMethodA" Source="D:\repos\TestProject\TestProject\bin\Debug\TestProject.dll" />
</TestSequence>

この場合、最後に一覧表示された <Test Name> は、クラッシュ時に実行されていたテストです。

終了コード

vstest.console.exe は、次の 2 つの終了コードのいずれかを返します。

Code Meaning
0 成功しました。 要求された操作が完了し、テストの実行に対して、実行されたすべてのテストが成功しました。
1 失敗。 たとえば、1 つ以上のテストが失敗した、実行エラーが報告された、コマンド ラインが無効または不足している、テスト ソースを読み込めなかった、実行が中止または取り消されたなどです。

プロセスは他の値を返しません。 dotnet testを使用してテストを実行すると、.NET SDK は、実行が同じ方法で失敗したときに、0 以外の終了コードを表示します。

検出で一致するテストが見つからない場合、ランナーはエラーではなく 警告 を出力し、既定では 0を返します。 代わりに、ゼロ テストを検出または選択する実行で1が返されるようにするには、.runsettings ファイルの RunConfiguration 要素に<TreatNoTestsAsError>true</TreatNoTestsAsError>を設定します。 詳細については、「 .runsettings ファイルを使用して単体テストを構成する」を参照してください。

シェル内のフィルター式をエスケープする

/TestCaseFilter 式はシェルとテスト プラットフォームの両方によって解析されるため、一部の文字は、それらを受け取る前にシェル固有のエスケープvstest.console.exe 必要があります。 この記事の前の例のように、式全体を引用すると、ほとんどの問題が回避されます。 次の場合は、特別な注意が必要です。

  • PowerShell: コンマ (,) は配列演算子で、セミコロン (;) はステートメント区切り記号です。 フィルター式全体を引用符で囲み、 /TestCaseFilter:"FullyQualifiedName=MyNamespace.MyClass.MyMethod"など、リテラルで渡されるようにします。

  • Bash および zsh (Linux および macOS): !~ (含まれていない) 演算子を使用する場合 (たとえば、dotnet test--filter FullyQualifiedName\!~IntegrationTestsする場合)、バックスラッシュを使用して!をエスケープします。 また、ジェネリック型引数リストの <>, など、シェルに特別な意味を持つ文字を含む値を引用符で囲みます。

    dotnet test --filter "FullyQualifiedName=MyNamespace.MyClass<Type1,Type2>.MyMethod"
    

テスト フレームワークごとの完全なフィルター参照とサポートされるプロパティについては、「 TestCase フィルター」を参照してください。

ログの例

各ロガーは、独自のパラメーターを定義します。 trx とは異なり、コンソール ロガーでは詳細レベルを設定できます。 詳細については、コマンド ラインで「 VSTest.Console/? 」と入力します。

コンソール ロガーの例を次に示します。

vstest.console.exe myTestFile.dll /logger:console;verbosity=detailed

サポートされる詳細レベルには、quiet、minimal、normal、detailed が含まれます。

PowerShell では、引用符を使用する必要があります。

vstest.console.exe myTestFile.dll /logger:"console;verbosity=detailed"

使用可能なロガーの完全な一覧と、独自のロガーを作成する手順については、vstest リポジトリでの テスト結果のレポートを 参照してください。

UWP の例

UWP の場合、DLL の代わりに appxrecipe ファイルを参照する必要があります。

vstest.console.exe /Logger:trx /Platform:x64 /framework:frameworkuap10 UnitTestsUWP\bin\x64\Release\UnitTestsUWP.build.appxrecipe

環境変数

テスト プラットフォームでは、いくつかの環境変数が認識されます。 コマンド ラインからテストを実行する場合に最も役立つ機能を次に示します。 完全な一覧については、vstest リポジトリの テスト プラットフォームで認識される環境変数 を参照してください。

Variable 形容
VSTEST_CONNECTION_TIMEOUT テスト プラットフォーム コンポーネント (vstest.console.exe、testhost、およびデータ コレクター) 間の接続を確立するためのタイムアウト (秒単位)。 既定値は 90 です。 低速なマシンで、またはネットワーク待機時間が原因で接続タイムアウトが発生した場合に増やします。
VSTEST_DIAG 診断ログを有効にし、ログ ファイルへのパスを指定します。 /Diag オプションと同じです。
VSTEST_DIAG_VERBOSITY VSTEST_DIAGが有効になっている場合の診断ログの詳細度を設定します。 有効な値は、 VerboseInfoWarning、および Error です (既定値は Verbose)。
VSTEST_HOST_DEBUG testhost プロセスのデバッグを有効にするには、空以外の値に設定します。
VSTEST_RUNNER_DEBUG ランナー (vstest.console.exe) のデバッグを有効にするには、空以外の値に設定します。
VSTEST_DUMP_PATH 非難クラッシュ ダンプが格納されている既定のディレクトリをオーバーライドします。
VSTEST_DUMP_FORCEPROCDUMP クラッシュ ダンプ収集に ProcDump を強制的に使用するには、空以外の値に設定します。
VSTEST_DISABLE_UTF8_CONSOLE_ENCODING コンソール出力で UTF-8 エンコードの設定を無効にするには、 1 に設定します。
VSTEST_CONSOLE_PATH .NET SDK のdotnet test転送アプリで使用されるvstest.console.exe実行可能ファイルへのパス。 プロジェクトでdotnet testを実行する場合の-p:VSTestConsolePathと同じです。