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.*
NuGet パッケージとその他のライブラリに基づいています。 VSTest と同様に、 Microsoft.Testing.Platform
はオープンソースであり、 microsoft/testfx GitHub リポジトリがあります。
通信プロトコル(プレビュー)
Note
Visual Studio テスト エクスプローラーは、17.10 以降の プレビュー バージョンで Microsoft.Testing.Platform プロトコルをサポートしています。 以前のバージョンの Visual Studio を使用してテストを実行またはデバッグする場合、テスト エクスプローラーでこれらのテストを実行するために、 vstest.console.exe
と古いプロトコルが使用されます。
Microsoft.Testing.Platform での Visual Studio とテスト ランナー プロセスの間の通信には、JSON-RPC ベースのプロトコルが使用されます。 このプロトコルは、 MSTest GitHub リポジトリのドキュメントに記載されています。
VSTest では JSON ベースの通信プロトコルも使用されますが、それは JSON-RPC ベースではありません。
新しいプロトコルの無効化
テスト エクスプローラーで新しいプロトコルの使用を無効にするために、プロジェクトを編集して次のプロパティを追加できます。<DisableTestingPlatformServerCapability>true</DisableTestingPlatformServerCapability>
。
実行可能ファイル
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
引数を新しいプラットフォーム引数から分離する必要があります。
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