.NET では、テスト フレームワークとテスト プラットフォームは、テストを検出して実行するために連携するさまざまなコンポーネントです。
- テスト フレームワークでは、MSTest、NUnit、xUnit.net、TUnit など、書き込むテスト モデルを定義します。
- テスト プラットフォームはテストを実行し、IDE と CLI と統合し、共有の拡張ポイントを提供します。
次の 2 つのテスト プラットフォームから選択できます。
- VSTest
- Microsoft.Testing.Platform (MTP)
Warnung
VSTest と Microsoft.Testing.Platform のテスト プロジェクトを同じリポジトリ実行構成に混在させないでください。
リポジトリのテスト ワークフロー用に 1 つのプラットフォームを選択し、そのプラットフォームに対してテスト プロジェクト、CI、およびツールを一貫して構成します。
プラットフォームを選択する方法
次のシナリオを使用して、すばやく選択します。
| 利用シーン | 選択 | なぜでしょうか |
|---|---|---|
| ネイティブ AOT またはトリミング テスト実行シナリオが必要です。 | Microsoft.Testing.Platform | MTP ではこれらの最新のデプロイ シナリオがサポートされますが、VSTest ではサポートされません。 |
| .NET テストと non-.NET テスト アダプター (JavaScript アダプターや C++ アダプターなど) を混在させる必要があります。 | VSTest | VSTest は、異なる言語のアダプタ シナリオをサポートしますが、MTP は .NET 固有です。 |
テスト プロジェクトを通常の実行可能ファイル (dotnet run、直接実行可能ファイルの実行、 dotnet watch、スタートアップ プロジェクトの F5 フロー) と同様に動作させる必要があります。 |
Microsoft.Testing.Platform | MTP は実行可能ファイル優先であるため、テスト アプリはローカル ワークフローと CI ワークフローで標準の .NET アプリと同様に実行されます。 |
| Microsoft と Microsoft 以外のツール間の長期的な統合に依存している。 | VSTest | VSTest には、既存の製品、タスク、パイプライン全体で最も長い互換性の追跡レコードがあります。 |
| マシン間での拡張機能の読み込みの再現性と厳密な制御を優先します。 | Microsoft.Testing.Platform | MTP では、明示的なビルド時の拡張機能の登録が優先されます。これにより、動的に検出されたコンポーネントからのマシン依存の動作が軽減され、セキュリティ レビューが簡略化されます。 |
| 環境ごとに無効にできるオプション機能を備えた最小限のコアが必要です。 | Microsoft.Testing.Platform | MTP は、オプトイン拡張機能を備えた軽量コアを使用します。 拡張機能でサポートされていない依存関係が導入された場合、または特定の環境でバージョンの競合が発生した場合は、その拡張機能を削除または無効にすることができます。 |
| 厳密な既定値と明示的な動作を使用することをお勧めします。 | Microsoft.Testing.Platform | MTP は、明示的なチェックを使用して確定的な実行を優先します。 たとえば、テストが実行されていない場合は失敗し、環境に依存する変動性が低下し、暗黙的な検出と実行ヒューリスティックが回避される可能性があります。 |
| より柔軟で幅広な下位互換性を持つデフォルト設定を好みます。 | VSTest | VSTest は、多様な既存のツールチェーンに対して互換性指向の既定値に優先順位を付けます。 |
| 現在のワークフローの VSTest 固有の問題または動作によってブロックされます。 | Microsoft.Testing.Platform | 多くのシナリオでは、ランタイム モデルと拡張アーキテクチャの違いにより、MTP に移動しても同じワークフローは影響を受けません。 |
特定のユース ケースが一覧にない場合は、両方のプラットフォームが有効な選択肢です。
統合とツールのサポート
| 統合領域 | VSTest | Microsoft.Testing.Platform |
|---|---|---|
| IDE 統合 | Visual Studio と VSTest プロトコルとアダプターに依存するその他のツール間の成熟した統合。 | Visual Studio と Visual Studio Code のシナリオでサポートされ、エコシステムの一部で継続的な統合作業が行われます。 |
| CI と外部ツール | 長い間確立された Microsoft および Microsoft 以外のツールとタスク全体で広範なサポート。 Azure DevOps では、VSTest タスク (VSTest@3、 vstest.console) または .NET タスク (DotNetCoreCLI@2、 dotnet test) を使用できます。 |
CI および最新の .NET ワークフローで動作しますが、一部のサードパーティ統合は VSTest より遅れる可能性があります。 Azure DevOps で、.NET タスク (DotNetCoreCLI@2、 dotnet test) を使用します。 |
dotnet test 動作 |
既定の VSTest モード。 VSTest の引数と動作が適用されます。 | ネイティブ MTP モードは、.NET 10 SDK 以降で使用できます。 .NET 10 SDK より前では、MTP は VSTest モードで実行されましたが、制限 (TestingPlatformDotnetTestSupportに加えて、余分な -- 引数区切り記号も含まれます)。 |
dotnet testモードと引数の詳細については、「dotnet testを使用したテスト」を参照してください。
テスト フレームワークから開始する
VSTest を選択した場合
- MSTest: MSTest を使用してテストを実行する
- NUnit: NUnit と Microsoft.Testing.Platform
- xUnit.net: xUnit.net の概要
- TUnit: VSTest ではサポートされていません。 Microsoft.Testing.Platform を使用します。
Microsoft.Testing.Platform を選択した場合
- MSTest: MSTest を使用してテストを実行する
- NUnit: NUnit での Microsoft.Testing.Platform のサポート (NUnit ランナー)
- xUnit.net: Microsoft Testing Platform (xUnit.net v3)
- TUnit: TUnit のドキュメント
次のステップ
- MTP の概念について: Microsoft.Testing.Platform の概要
- VSTest オプションについて: VSTest オプション
- VSTest からの移行: VSTest から Microsoft.Testing.Platform に移行する
- 機能の追加: Microsoft.Testing.Platform の機能
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET