次の方法で共有


'dotnet test' を使用したテスト

この記事では、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 を実行します。

TestingPlatformDotnetTestSupportDirectory.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 固有のコマンド ライン オプションを渡し、 TestingPlatformDotnetTestSupporttrue に設定する必要があります。
  • 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>