次の方法で共有


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.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 引数を新しいプラットフォーム引数から分離する必要があります。

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