Microsoft。Testing.Platform (MTP) は、継続的インテグレーション (CI) パイプライン、CLI、Visual Studio テスト エクスプローラー、VS Code テスト エクスプローラーなど、すべてのコンテキストでテストを実行するための、VSTest の軽量で移植可能な代替手段です。 MTP はテスト プロジェクトに直接埋め込まれており、テストの実行に必要な vstest.console や dotnet test など、他のアプリの依存関係はありません。
ヒント
VSTest と MTP の選択に関するヘルプが必要な場合は、 テスト プラットフォームの概要から始めます。
この記事は、MTP の使用を既に決定しており、そのモデル、機能、運用動作を理解する必要がある場合に使用します。
MTP がオープンソース。
Microsoft.Testing.Platform コードは、microsoft/testfx GitHub リポジトリにあります。
ここから始める
次に必要なものに基づいて、次のパスを使用します。
- CLI、IDE、または CI からのテストの実行と デバッグ: テストの実行とデバッグ
- CLI でのプラットフォームの動作を理解する:
dotnet testを使用したテスト - プラットフォームと拡張機能の CLI スイッチを 1 か所で検索する: MTP CLI オプション リファレンス
- フレームワーク ランナーの構成: NUnit (NUnit ランナー) で MSTest または MTP サポートを使用してテストを実行する
- UWP または WinUI 3 アプリで MTP をホストする: MSTest と MTP を使用して UWP アプリと WinUI 3 アプリをテストする
- 既存の VSTest セットアップを移行する: VSTest から MTP に移行する
- 診断、カバレッジ、レポートの追加: MTP 機能
- 独自の拡張機能を構築する: MTP アーキテクチャ、 拡張ポイント、 サービス
- ビルド エディターまたは IDE 統合: MTP サーバー モード
MTP の要点
この新しいテスト プラットフォームは、.NET Developer Experience Testing チームの経験に基づいて構築され、2016 年の .NET Core のリリース以降に発生した課題に対処することを目的としています。 .NET Framework と .NET Core/.NET の間には高いレベルの互換性がありますが、プラグイン システムや.NETコンパイルの新しいフォーム ファクターなど、いくつかの重要な機能により、現在の VSTest プラットフォーム アーキテクチャで新しいランタイム機能を進化または完全にサポートすることが複雑になりました。
新しいテスト プラットフォームの進化の主な推進要因については、以下で詳しく説明します。
決定主義: 異なるコンテキスト (ローカル、CI) で同じテストを実行すると、同じ結果が生成されることを確認します。 新しいランタイムは、リフレクションやその他の動的.NETランタイム機能に依存してテストの実行を調整することはありません。
ランタイムの透過性: テスト ランタイムはテスト フレームワーク コードに干渉せず、
AppDomainやAssemblyLoadContextなどの分離されたコンテキストを作成せず、リフレクションまたはカスタム アセンブリ リゾルバーを使用しません。拡張機能のコンパイル時の登録: テスト フレームワークやプロセス外の拡張機能などの拡張機能は、確定性を確保し、不整合の検出を容易にするためにコンパイル時に登録されます。
Zero 依存関係: プラットフォームのコアは、サポートされているランタイム以外の依存関係を持たない 1 つの.NET アセンブリである
Microsoft.Testing.Platform.dllです。Hostable: テスト ランタイムは、任意の.NET アプリケーションでホストできます。 コンソール アプリケーションはテストの実行に一般的に使用されますが、任意の種類の .NET アプリケーションでテスト アプリケーションを作成できます。 これにより、制限がある可能性があるデバイスやブラウザーなどの特殊なコンテキスト内でテストを実行できます。
.NETフォーム ファクターをすべてサポート: ネイティブ AOT を含む現在および将来の.NETフォーム ファクターをサポートします。
パフォーマンス: 機能と拡張ポイントの間の適切なバランスを見つけ、基本以外のコードでランタイムが肥大化しないようにします。 新しいテスト プラットフォームは、どのように行うかの実装の詳細を提供するのではなく、テスト実行を管理するように設計されています。
十分に拡張可能: 新しいプラットフォームは、ランタイム実行を最大限にカスタマイズできるように拡張ポイントに基づいて構築されています。 テスト プロセス ホストを構成し、テスト プロセスを観察し、テスト ホスト プロセス内でテスト フレームワークからの情報を使用することができます。
1 つのモジュールデプロイ: ホスト機能を使用すると、単一のモジュールデプロイ モデルを使用できます。このモデルでは、1 つのコンパイル結果を使用して、アウトプロセスとインプロセスの両方のすべての機能拡張ポイントをサポートできます。異なる実行可能モジュールを出荷する必要はありません。
サポートされるテスト フレームワーク
- MSTest MSTest では、MTP のサポートは MSTest ランナーを介して行われます。
- NUnit。 NUnit では、MTP のサポートは NUnit ランナーを介して行われます。
- xUnit.net。 詳細については、Microsoft Testing Platform (xUnit.net v3) および Microsoft Testing Platform (xUnit.net v2) を xUnit.net ドキュメントで参照してください。
- TUnit: 完全に MTP 上に構築されています。詳細については、 TUnit のドキュメントを参照してください。
サポート対象のターゲット フレームワーク
MTP では、.NET (.NET 8 以降)、.NET Framework (バージョン 4.6.2 以降) がサポートされ、NETStandard 2.0 をターゲットにして、他のランタイムとの互換性を最大限に高めます。
MTP 2.5 および MSTest 4.5 以降では、MTP では、MSTest.Sdk アプリ モデル サイドカーを介して、従来の UWP、モダン .NET UWP、WinUI 3 AppContainer テスト ホストもサポートされています。 パッケージ化された完全信頼およびパッケージ化されていない WinUI 3 テスト ホストもサポートされます。 詳細については、「 MSTest と MTP を使用して UWP アプリと WinUI 3 アプリをテストする」を参照してください。
テストを実行およびデバッグする
CLI、Visual Studio、Visual Studio Code、および CI pipelinesからの MTP テスト プロジェクトの実行とデバッグの詳細なガイダンスについては、「Run and debug testsを参照してください。
オプション
プラットフォームと拡張機能のコマンド ライン オプションの完全な一覧については、 MTP CLI オプションリファレンスを参照してください。
MSBuild の統合
NuGet パッケージ Microsoft。Testing.Platform.MSBuild は、MTP と MSBuild のさまざまな統合を提供します。
-
dotnet testをサポートします。 詳細については、「 dotnet テストを使用したテスト」を参照してください。 -
ProjectCapabilityおよびVisual Studioのテスト エクスプローラーに必要とされるVisual Studio Codeのサポート。 - エントリポイントの自動生成(
Mainメソッド)。 - 設定ファイルの自動生成。
- インストールされている拡張機能パッケージの自動検出と登録。
このパッケージがアクティブな場合 (MSTest、NUnit、xUnit ランナーの既定値)、拡張機能 NuGet パッケージのインストールは必要なすべてであり、拡張機能はコードを変更しなくても自動登録されます。
<GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>設定して自動生成されたエントリ ポイントを無効にする場合は、Main メソッドに拡張機能を手動で登録する必要があります。 各拡張機能ページには、その手動登録呼び出しが文書化されています。
MTP 2.4 以降、Microsoft提供される拡張機能パッケージは、Microsoft.Testing.Platformの依存関係を現在のメジャー バージョンに制限します。 たとえば、2.4 拡張機能では、[2.4.0, 3.0.0)範囲内のMicrosoft.Testing.Platformが必要です。 この範囲では、NuGet が拡張機能とサポートされていない将来のプラットフォーム メジャーを暗黙的に組み合わせないようにします。 プラットフォームパッケージと拡張パッケージは同じリリースラインに保持します。
注
この統合は推移的な方法で動作し (このパッケージを参照する別のprojectを参照するprojectは、パッケージを参照しているかのように動作します)、IsTestingPlatformApplication MSBuild プロパティを使用して無効にすることができます。
こちらもご覧ください
.NET