Microsoft.Testing.Platform と VSTest の比較
Microsoft.Testing.Platform
は、コマンド ライン、継続的インテグレーション (CI) パイプライン、Visual Studio テスト エクスプローラー、および Visual Studio Code でテストを実行するための VSTest を するための軽量で移植可能な代替手段です。 この記事では、MSTest ランナーと VSTest の主な違いについて説明します。
テスト実行の違い
テストはランナーによって異なる方法で実行されます。
VSTest テストを実行する
VSTest には、Visual Studio、.NET SDK、および Microsoft.TestPlatform NuGet パッケージのスタンドアロン ツールが付属しています。 VSTest では、ランナー実行可能ファイルを使用して、vstest.console.exe
と呼ばれるテストを実行します。これは、直接または dotnet test
を介して使用できます。
Microsoft.Testing.Platform テストを実行する
Microsoft.Testing.Platform はテスト プロジェクトに直接埋め込まれており、追加の実行可能ファイルは出荷されません。 プロジェクトの実行可能ファイルを実行すると、テストが実行されます。 Microsoft.Testing.Platform テストの実行の詳細については、「Microsoft.Testing.Platform の概要:テストの実行とデバッグ」を参照してください。
名前空間と NuGet パッケージ
Microsoft.Testing.Platform
と VSTest について理解するには、それぞれで使用される名前空間と NuGet パッケージを理解すると便利です。
VSTest 名前空間
VSTest は、テスト プラットフォームとも呼ばれるテスト ツールのコレクションです。 VSTest ソース コードはオープンソースであり、microsoft/vstest GitHub リポジトリで使用できます。 このコードでは、Microsoft.TestPlatform.*
名前空間を使用します。
VSTest は拡張可能であり、一般的な型は Microsoft.TestPlatform.ObjectModel NuGet パッケージ 配置されます。
Microsoft.Testing.Platform 名前空間
Microsoft.Testing.Platform は、Microsoft.Testing.Platform NuGet パッケージと、Microsoft.Testing.*
名前空間内の他のライブラリに基づいています。 VSTest と同様に、Microsoft.Testing.Platform
はオープンソースであり、GitHub リポジトリ microsoft/testfx を持っています。
通信プロトコル
手記
Visual Studio テスト エクスプローラーでは、17.12 以降の Microsoft.Testing.Platform プロトコルがサポートされています。 以前のバージョンの Visual Studio を使用してテストを実行またはデバッグする場合、テスト エクスプローラーでは、vstest.console.exe
と古いプロトコルを使用してこれらのテストを実行します。
Microsoft.Testing.Platform では、JSON-RPC ベースのプロトコルを使用して、Visual Studio とテスト ランナー プロセスの間で通信します。 プロトコルについては、MSTest GitHub リポジトリに記載されています。
VSTest では JSON ベースの通信プロトコルも使用されますが、JSON-RPC ベースではありません。
新しいプロトコルの無効化
テスト エクスプローラーで新しいプロトコルの使用を無効にするには、プロジェクトを編集して次のプロパティを追加できます: <DisableTestingPlatformServerCapability>true</DisableTestingPlatformServerCapability>
。
Visual Studio の [プレビュー機能] オプションに移動し、[テスト プラットフォーム サーバー モードを使用する] オプションの選択を解除することもできます。
実行可能ファイル
VSTest には、特に vstest.console.exe
、testhost.exe
、datacollector.exe
など、複数の実行可能ファイルが付属しています。 ただし、MSTest はテスト プロジェクトに直接埋め込まれており、他の実行可能ファイルは出荷されません。 テスト プロジェクトがコンパイルする実行可能ファイルは、すべてのテスト ツールをホストし、テストの実行に必要なすべてのタスクを実行するために使用されます。
VSTest からの移行
テスト フレームワークに固有の手順に加えて、Microsoft.Testing.Platform
に対応するようにテスト インフラストラクチャを更新する必要があります。
dotnet test
dotnet test
のコマンド ライン オプションは、ビルド関連の引数とテスト関連の引数の 2 つのカテゴリに分かれています。
ビルド関連の引数は dotnet build
コマンドに渡されるため、新しいプラットフォーム用に更新する必要はありません。 ビルド関連の引数を次に示します。
-a|--arch <ARCHITECTURE>
--artifacts-path <ARTIFACTS_DIR>
-c|--configuration <CONFIGURATION>
-f|--framework <FRAMEWORK>
-e|--environment <NAME="VALUE">
--interactive
--no-build
--nologo
--no-restore
-o|--output <OUTPUT_DIRECTORY>
--os <OS>
-r|--runtime <RUNTIME_IDENTIFIER>
-v|--verbosity <LEVEL>
テスト関連の引数は VSTest 固有であるため、新しいプラットフォームに合わせて変換する必要があります。 次の表に、VSTest 引数と新しいプラットフォームの間のマッピングを示します。
VSTest 引数 | 新しいプラットフォーム引数 |
---|---|
--test-adapter-path <ADAPTER_PATH> |
サポートされていません |
--blame |
サポートされていません |
--blame-crash |
--crashdump は クラッシュダンプ拡張機能 を必要とします |
--blame-crash-dump-type <DUMP_TYPE> |
--crashdump-type は クラッシュ ダンプ拡張機能を必要とします |
--blame-crash-collect-always |
サポートされていません |
--blame-hang |
--hangdump には、 ハング ダンプ拡張機能 が必要です |
--blame-hang-dump-type <DUMP_TYPE> |
--hangdump-type には、ハングダンプ拡張機能 が必要です。 |
--blame-hang-timeout <TIMESPAN> |
--hangdump-timeout には、ハング ダンプ拡張機能 が必要です |
--collect <DATA_COLLECTOR_NAME> |
データ コレクターに依存 |
-d\|--diag <LOG_FILE> |
--diagnostic |
--filter <EXPRESSION> |
選択したテスト フレームワークによって異なります |
-l\|--logger <LOGGER> |
ロガーに依存 |
--results-directory <RESULTS_DIR> |
--results-directory <RESULTS_DIR> |
-s\|--settings <SETTINGS_FILE> |
選択したテスト フレームワークによって異なります |
-t\|--list-tests |
--list-tests |
-- <RunSettings arguments> |
サポートされていません |
重要
Microsoft.Testing.Platform
引数を指定する前に、--
を追加して、dotnet test
引数を新しいプラットフォーム引数から分離する必要があります。 たとえば、dotnet test --no-build -- --list-tests
します。
vstest.console.exe
vstest.console.exe
を直接使用している場合は、dotnet test
コマンドに置き換えることをお勧めします。
テスト エクスプローラー
Visual Studio または Visual Studio Code テスト エクスプローラーを使用する場合は、新しいテスト プラットフォームのサポートを有効にする必要がある場合があります。
Visual Studio
Visual Studio テスト エクスプローラーでは、バージョン 17.14 以降の新しいテスト プラットフォームがサポートされています。 以前のバージョンを使用している場合は、Visual Studio を最新バージョンに更新することが必要になる場合があります。
Visual Studio Code
Visual Studio Code テスト エクスプローラーでは、バージョン X 以降の新しいテスト プラットフォームがサポートされています。
Azure DevOps
Azure DevOps タスクを使用する場合は、新しいテスト プラットフォームを使用するようにパイプラインを更新することが必要になる場合があります。
VSTest タスク
Azure DevOps で VSTest タスク を使用している場合は、.NET Core タスクに置き換えることができます。
.NET Core タスク
.NET Core タスクを使用している場合、変更は必要ありません。
.NET