この記事では、VSTest と Microsoft.Testing.Platform (MTP) との過去バージョンとの互換性を含む、dotnet test CLI コマンドに関する分析情報を提供します。
dotnet test コマンドは、次の 2 つのプライマリ モードで動作します。
-
VSTest モード: これは
dotnet testの既定のモードであり、.NET 10 SDK より前に使用可能な唯一のモードでした。 これは主に VSTest 用に設計されていますが、Microsoft.Testing.Platform.MSBuild NuGet パッケージを介して Microsoft.Testing.Platform テストを実行することもできます。 - Microsoft。Testing.Platform モード: .NET 10 SDK で導入されたこのモードでは、Microsoftでビルドされたテスト アプリケーションのみがサポートされます。Testing.Platform。
ヒント
CLI リファレンスについては、 dotnet テストを参照してください。
dotnet test の VSTest モード
長い間、VSTest は.NETで唯一のテスト プラットフォームでした。 そのため、 dotnet test は VSTest 専用に設計されており、すべてのコマンド ライン オプションは VSTest に合わせて調整されています。
このプロセスには、 VSTest MSBuild ターゲットの呼び出しが含まれます。このターゲットは、他の内部ターゲットをトリガーして実行し、最終的に vstest.console を実行します。
dotnet testコマンド ライン オプションはすべて、vstest.console で同等のオプションに変換されます。
VSTest モードで MTP プロジェクトを実行する
dotnet test は、VSTest モードで VSTest プロジェクトを実行するように設計されています。 ただし、Microsoft.Testing.Platform.MSBuild パッケージを使用することで、dotnet test VSTest モードで MTP プロジェクトを実行することができます。 ユーザーの視点では、このサポートは、TestingPlatformDotnetTestSupport MSBuild プロパティを true に設定することで有効になります (下位互換性のため、既定では false になっています)。 このプロパティを true に設定すると、Microsoft。Testing.Platform.MSBuild は、VSTest ターゲットの動作を変更し、InvokeTestingPlatform を呼び出すためにリダイレクトします。
InvokeTestingPlatform は、Microsoft.Testing.Platform.MSBuild に含まれる MSBuild ターゲットであり、MTP テスト アプリケーションを実行可能ファイルとして正しく実行する役割を担っています。
--logger などの VSTest 固有コマンドライン オプションは、このモードではあまり重要ではありません。
--report-trx などの MTP 固有引数を含めるには、追加の -- にアペンドする必要があります。 たとえば、dotnet test -- --report-trx のようにします。 MTP 1.9 では、警告なしで無視される引数が検出されると、コード MTP0001を含む警告が生成されます。
注
MSTest と NUnit は、Microsoft.Testing.Extensions.VSTestBridge パッケージを使用します。
EnableMSTestRunner または EnableNUnitRunner を設定することで (Microsoft.Testing.Platformを有効にする)、テストプロジェクトは VSTest と Microsoft.Testing.Platform の両方をサポートします。
このシナリオで、dotnet test の VSTest モードを使用し、TestingPlatformDotnetTestSupport を True に設定しない場合、EnableMSTestRunner および EnableNUnitRunner が True に設定されていないかのように、基本的には完全に VSTest を実行します。
注
TestingPlatformDotnetTestSupport で Directory.Build.props プロパティを設定することが強く推奨されます。 これにより、各テスト プロジェクト ファイルに個別に追加する必要が無くなります。 さらに、このプロパティを設定しない新しいテスト プロジェクトを導入するリスクも回避され、一部のプロジェクトでは VSTest を使用し、他のプロジェクトでは Microsoft を使用するソリューションが発生する可能性があります。Testing.Platform。 この混合構成は、正常に機能しない場合があり、未対応のシナリオである場合があります。
重要
VSTest モードで MTP プロジェクトを実行することは、.NET 10 SDK の新しいエクスペリエンスを優先してレガシと見なされます。 このモードでの実行サポートは、.NET 10 SDK と共に実行される場合、Microsoft.Testing.Platform バージョン 2 で削除されます。 下位互換性のために、.NET 9 SDK 以前のサポートは引き続き利用できます。
詳細については、「dotnet testの MTP モードへの移行」を参照してください。
次の一覧は、Microsoftでサポートされている VSTest モードの dotnet test コマンドのコマンド ライン オプションの概要を示しています。Testing.Platform。 これらのオプションは、構築プロセス固有のもので、VSTest には渡されません。したがって、MTP で動作します。
-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>
ヒント
MSBuild プロパティを使用して、テスト アプリケーションのコマンド ライン引数 TestingPlatformCommandLineArguments カスタマイズできます。
<PropertyGroup>
...
<TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>
テストごとにエラーを表示する
デフォルトでは、テストの失敗は .log ファイルにまとめられ、テスト プロジェクトごとに 1 つの失敗が MSBuild に報告されます。
失敗したテストごとにエラーを表示するには、コマンド ラインで -p:TestingPlatformShowTestsFailure=true を指定するか、プロジェクト ファイルに <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure> プロパティを追加します。
コマンド ライン:
dotnet test -p:TestingPlatformShowTestsFailure=true
完全なプラットフォーム出力を表示する
既定では、基となるテスト実行可能ファイルから書き込まれたすべてのコンソール出力が取り込まれ、ユーザーには表示されません。 これには、バナー、バージョン情報、書式設定されたテスト情報などがあります。
この情報を MSBuild 出力結果と同時に表示するには、 <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>を使います。
このオプションは、テスト フレームワークがユーザー出力 (Console.WriteLine または他の同様の書き込み方法でコンソールに書き込まれたもの) を取り込む方法には影響しません。
コマンド ライン:
dotnet test -p:TestingPlatformCaptureOutput=false
高度な技術的な詳細
VSTest モード dotnet test 、 -- は RunSettings 引数を示すために使用されます。 当初、 dotnet test は、これらの引数を VSTestCLIRunSettings と呼ばれる MSBuild プロパティとして渡すように設計されていました。 したがって、VSTest モードで MTP テスト アプリケーションを実行する場合は、"アプリケーション引数" を表すために VSTestCLIRunSettings の値を再利用します。
VSTestとMicrosoft.Testing.Platform (MTP) の混在
VSTest モードで dotnet test を実行する場合、同じソリューション内に VSTest と Microsoft.Testing.Platform の両方を含めないことをお勧めします。
このシナリオは公式にはサポートされていないため、次の点に注意する必要があります。
- VSTest 固有のコマンド ライン オプションは、VSTest プロジェクトにのみ適用され、MTP テスト アプリケーションには適用されません。
-
--後に提供される MTP 固有のコマンド ライン オプションは、VSTest プロジェクトの RunSettings 引数として扱われます。
重要なポイント
-
dotnet testVSTest モードで MTP テスト アプリケーションを実行するには、Microsoft.Testing.Platform.MSBuildを使用し、追加の--の後に MTP 固有のコマンド ライン オプションを渡し、TestingPlatformDotnetTestSupportをtrueに設定する必要があります。 - VSTest 指向のコマンド ライン オプションは、暗黙的に無視されます。
これらの問題により、.NETでは、MTP 用に特別に設計された新しい dotnet test モードが導入されました。 MTP ユーザーには、VSTest dotnet test モードから、.NET 10 SDK を使用して新しいモードに移行することをお勧めします。
Microsoft Testing.Platform (MTP) モードのdotnet test
VSTest モードで MTP で dotnet test を実行するときに発生する問題に対処するために、.NETでは、MTP 専用に設計された .NET 10 SDK に新しいモードが導入されました。
このモードを有効にするには、 global.json ファイルに次の構成を追加します。
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
重要
MTP の dotnet test エクスペリエンスは、Microsoft.Testing.Platform バージョン 1.7 以降でのみサポートされています。
このモードはMicrosoft専用に設計されているためです。Testing.Platform では、TestingPlatformDotnetTestSupport も追加の -- も必要ありません。
重要
このモードは、Microsoftとのみ互換性があります。Testing.Platform バージョン 1.7.0 以降。
重要
テスト プロジェクトが VSTest をサポートしていても MTP をサポートしていない場合は、エラーが生成されます。
ヒント
MSBuild プロパティを使用して、テスト アプリケーションのコマンド ライン引数 TestingPlatformCommandLineArguments カスタマイズできます。
<PropertyGroup>
...
<TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>
の MTP モードに移行する dotnet test
の VSTest モードを使用している MTP のユーザーの場合、新しい エクスペリエンスに移行するために必要なアクションはほとんどありません。
- 上に示すように、
testファイルにglobal.jsonセクションを追加します。 - 不要になった MSBuild プロパティ
TestingPlatformDotnetTestSupport削除します。 - MSBuild プロパティ
TestingPlatformCaptureOutputおよびTestingPlatformShowTestsFailureを削除してください。これらは新しいdotnet testで使用されなくなりました。 - 余分な
--を削除します。たとえば、dotnet test -- --report-trxがdotnet test --report-trxされます。 - 特定のソリューション (またはソリューションを含むディレクトリ) を渡す場合 (たとえば、
dotnet test MySolution.sln)、これはdotnet test --solution MySolution.slnになります。 - 特定のプロジェクト (またはプロジェクトを含むディレクトリ) を渡す場合 (たとえば、
dotnet test MyProject.csproj)、これはdotnet test --project MyProject.csprojになります。 - 特定の dll (たとえば、
dotnet test path/to/UnitTests.dll) を渡すと、これはdotnet test --test-modules path/to/UnitTests.dllになります。--test-modulesでは globbing もサポートされることに注意してください。
.NET