この記事では、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 プロジェクトを実行するように設計されています。 ただし、dotnet test
パッケージを使用すると、MTP プロジェクトを VSTest モードで実行できます。 ユーザーの視点では、このサポートは、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
のようにします。
注
MSTest および NUnit は、Microsoft.Testing.Extensions.VSTestBridge パッケージを使用します。 (Microsoft.Testing.Platform を有効化する) EnableMSTestRunner
または EnableNUnitRunner
を設定することで、テスト プロジェクトは、VSTest と Microsoft.Testing.Platform の両方をサポートします。
このシナリオで、dotnet test
の VSTest モードを使用し、TestingPlatformDotnetTestSupport
を True に設定しない場合、EnableMSTestRunner
および EnableNUnitRunner
が True に設定されていないかのように、基本的には完全に VSTest を実行します。
注
TestingPlatformDotnetTestSupport
で Directory.Build.props
プロパティを設定することが強く推奨されます。 これにより、各テスト プロジェクト ファイルに個別に追加する必要が無くなります。 さらに、このプロパティを設定していない新しいテスト プロジェクトを導入するリスクを回避できます。その結果、一部のプロジェクトでは VSTest を使用し、他のプロジェクトでは Microsoft.Testing.Platform を使用するソリューションが発生する場合があります。 この混合構成は、正常に機能しない場合があり、未対応のシナリオである場合があります。
次の一覧では、Microsoft.Testing.Platform が サポートする VSTest モードの dotnet test
コマンドのコマンドライン オプションを概説しています。 これらのオプションは、構築プロセス固有のもので、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>
dotnet test
の VSTest モードでの MTP プロジェクトの実行に固有の詳細については、「dotnet test
の VSTest モードで Microsoft.Testing.Platform を使用する」を参照してください。
高度な技術的な詳細
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 引数として扱われます。
重要なポイント
- VSTest モードで MTP テスト アプリケーション
dotnet test
実行するには、Microsoft.Testing.Platform.MSBuild
を使用し、追加の--
の後に MTP 固有のコマンド ライン オプションを渡し、TestingPlatformDotnetTestSupport
をtrue
に設定する必要があります。 - VSTest 指向のコマンド ライン オプションは、暗黙的に無視されます。
これらの問題により、.NET では、MTP 用に特別に設計された新しい dotnet test
モードが導入されました。 MTP ユーザーには、.NET 10 SDK を使用して VSTest dotnet test
モードから新しいモードに移行することをお勧めします。
dotnet test
の Microsoft.Testing.Platform (MTP) モード
VSTest モードで MTP で dotnet test
を実行するときに発生する問題に対処するために、.NET では、MTP 用に特別に設計された新しいモードが .NET 10 SDK に導入されました。
このモードを有効にするには、リポジトリまたはソリューションのルートに dotnet.config
ファイルを追加します。
[dotnet.test.runner]
name = "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>
.NET