次の方法で共有


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.exetesthost.exedatacollector.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 タスクを使用している場合、変更は必要ありません。