この記事では、VSTest から Microsoft.Testing.Platform に移行する方法について説明します。
Microsoft.Testing.Platform の使用をオプトインする
移行の最初の手順は、Microsoft.Testing.Platform の使用をオプトインすることです。
すべてのテスト フレームワークについて、ソリューション内のすべてのテスト プロジェクトに <OutputType>Exe</OutputType> を追加します。 その後、フレームワーク固有のガイダンスに従います。
MSTest
Microsoft.Testing.Platform は、3.2.0 以降の MSTest でサポートされています。 ただし、利用可能な最新の MSTest バージョンに更新することをお勧めします。
オプトインするには、ファイル内の<EnableMSTestRunner>true</EnableMSTestRunner>の下にPropertyGroupDirectory.Build.props追加します。
注
MSTest.Sdk を使用する場合、 <UseVSTest>true</UseVSTest> が指定されていない限り、Microsoft.Testing.Platform が既定で使用されます。
NUnit
Microsoft.Testing.Platform は、5.0.0 以降の NUnit3TestAdapter でサポートされています。
オプトインするには、ファイル内の<EnableNUnitRunner>true</EnableNUnitRunner>の下にPropertyGroupDirectory.Build.props追加します。
xUnit.net
Microsoft.Testing.Platform は xunit.v3 以降でサポートされています。
オプトインするには、ファイル内の<UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner>の下にPropertyGroupDirectory.Build.props追加します。
dotnet test
.NET 9 SDK 以前への参加申し込み
.NET 9 SDK 以前では、Microsoft.Testing.Platform for のdotnet test サポートはありません。 サポートは VSTest インフラストラクチャの上に構築されています。 これを使用するには、ファイル内の<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>の下にPropertyGroupDirectory.Build.props追加します。
Important
このモードで Microsoft.Testing.Platform サポートを実行する場合は、 -- を追加して、 dotnet test 引数を新しいプラットフォーム引数から分離する必要があります。 たとえば、「 dotnet test --no-build -- --list-tests 」のように入力します。
.NET 10 SDK 以降にオプトインする
.NET 10 SDK 以降では、Microsoft.Testing.Platform の ネイティブ サポートがあります。 これを使用するには、Microsoft.Testing.Platformランナーをとして指定する必要があります。
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
Important
このモードでは、余分な -- は使用されなくなりました。
dotnet test呼び出しを更新する
dotnet testのコマンド ライン オプションは、ビルド関連の引数とテスト関連の引数の 2 つのカテゴリに分かれています。
ビルド関連の引数はテスト プラットフォームとは無関係であり、新しいプラットフォーム用に更新する必要はありません。 ビルド関連の引数を次に示します。
-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>
テスト関連の引数は VSTest 固有であるため、新しいプラットフォームに合わせて変換する必要があります。 次の表に、VSTest 引数と新しいプラットフォームの間のマッピングを示します。
| VSTest 引数 | 新しいプラットフォーム引数 |
|---|---|
--test-adapter-path <ADAPTER_PATH> |
Microsoft.Testing.Platform には関係ありません |
--blame |
Microsoft.Testing.Platform には関係ありません |
--blame-crash |
--crashdump ( クラッシュ ダンプ拡張機能が必要) |
--blame-crash-dump-type <DUMP_TYPE> |
--crashdump-type ( クラッシュ ダンプ拡張機能が必要) |
--blame-crash-collect-always |
サポートされていません |
--blame-hang |
--hangdump (要 ハングダンプ拡張機能) |
--blame-hang-dump-type <DUMP_TYPE> |
--hangdump-type(ハングダンプ拡張機能が必要) |
--blame-hang-timeout <TIMESPAN> |
--hangdump-timeout (ハングダンプ拡張機能 が必要です) |
--collect <DATA_COLLECTOR_NAME> |
データ コレクターに依存 |
-d\|--diag <LOG_FILE> |
--diagnostic |
--filter <EXPRESSION> |
選択したテスト フレームワークによって異なります |
-l\|--logger <LOGGER> |
ロガーに依存 |
--results-directory <RESULTS_DIR> |
--results-directory <RESULTS_DIR> |
-s\|--settings <SETTINGS_FILE> |
選択したテスト フレームワークによって異なります |
-t\|--list-tests |
--list-tests |
-- <RunSettings arguments> |
--test-parameter ( VSTestBridge によって提供) |
--collect
--collect は、任意のデータ コレクターの VSTest の一般的な拡張ポイントです。 Microsoft.Testing.Platform の拡張性モデルは異なり、すべてのデータ コレクターで使用されるこのような一元化された引数はありません。 Microsoft.Testing.Platform では、各データ コレクターが独自のコマンド ライン オプションを追加できます。 たとえば、VSTest を使用して Microsoft CodeCoverage を実行すると、次のようになります。
dotnet test --collect "Code Coverage;Format=cobertura"
Microsoft.Testing.Platform では、次のようになります。
dotnet test --coverage --coverage-output-format cobertura
Important
前に説明したように、VSTest ベースの dotnet testで Microsoft.Testing.Platform を使用する場合は、プラットフォームに渡すことを意図した引数の前に追加の -- が必要です。
そのため、これは dotnet test -- --coverage --coverage-output-format coberturaになります。
--filter
--filter は VSTest ベースのフィルターです。
MSTest と NUnit は、Microsoft.Testing.Platform で実行されている場合でも、同じフィルター形式をサポートします。
xUnit.net、Microsoft.Testing.Platform で実行する場合、同じフィルター形式はサポートされません。 次のコマンド ライン オプションを使用して、VSTest ベースのフィルターから xunit.v3 の新しいフィルター サポートに移行する必要があります。
xUnit.net の特定オプション
--filter-class--filter-not-class--filter-method--filter-not-method--filter-namespace--filter-not-namespace--filter-trait--filter-not-trait--filter-query
詳細については、xUnit.net の Microsoft.Testing.Platform ドキュメントと、xUnit.netのクエリ フィルター言語に関するドキュメントを参照してください。
--logger
通常、VSTest で "logger" と呼ばれていたものは、Microsoft.Testing.Platform では "reporter" と呼ばれます。 Microsoft.Testing.Platform では、ログ記録は診断目的でのみ明示的に行われます。
--collectと同様に、--loggerは、任意のロガー (または Microsoft.Testing.Platform のコンテキストでは任意のレポーター) の VSTest の一般的な拡張ポイントです。 各 Microsoft.Testing.Platform レポーターは、独自のコマンド ライン オプションを自由に追加できます。そのため、VSTest の --loggerのような一元化されたコマンド ライン オプションはありません。
非常に一般的に使用される VSTest ロガーの 1 つは、TRX ロガーです。 通常、このロガーは次のように呼び出されます。
dotnet test --logger trx
Microsoft.Testing.Platform では、コマンドは次のようになります。
dotnet test --report-trx
Important
--report-trxを使用するには、Microsoft.Testing.Extensions.TrxReport NuGet パッケージがインストールされている必要があります。
Important
前に説明したように、VSTest ベースの dotnet testで Microsoft.Testing.Platform を使用する場合は、プラットフォームに渡すことを意図した引数の前に追加の -- が必要です。
そのため、これは dotnet test -- --report-trxになります。
--settings
VSTest の --settings は、テスト実行の RunSettings ファイルを指定するために使用されます。 RunSettings はコア Microsoft.Testing.Platform ではサポートされておらず、より最新の testconfig.json 構成ファイルに置き換えられました。 ただし、MSTest と NUnit では、Microsoft.Testing.Platform の実行時に古い RunSettings が引き続きサポートされ、 --settings は引き続きサポートされます。
vstest.console.exe
vstest.console.exeを直接使用している場合は、dotnet test コマンドに置き換えることをお勧めします。
テスト エクスプローラ
Visual Studio または Visual Studio Code テスト エクスプローラーを使用する場合は、Microsoft.Testing.Platform のサポートを有効にする必要がある場合があります。
Visual Studio
Visual Studio テスト エクスプローラーでは、バージョン 17.14 以降の Microsoft.Testing.Platform がサポートされています。 以前のバージョンを使用している場合は、Visual Studio を最新バージョンに更新することが必要になる場合があります。
Visual Studio Code
Visual Studio Code と C# DevKit では、Microsoft.Testing.Platform がサポートされています。
Azure DevOps
Azure DevOps タスクを使用する場合は、使用するタスクに応じて、Microsoft.Testing.Platform を使用するようにパイプラインを更新することが必要になる場合があります。
VSTest タスク
Azure DevOps で VSTest タスク を使用している場合は、 .NET Core タスクに置き換えることができます。
.NET Core CLI タスク
タスクにカスタム
argumentsが渡されている場合は、dotnet test移行の同じガイダンスに従ってください。.NET 10 SDK 以降のネイティブ Microsoft.Testing.Platform エクスペリエンスに ファイル経由でオプトインせずに
global.jsonタスクを使用している場合は、タスクargumentsを、それが指していた結果ディレクトリと、要求された TRX レポートを正しくポイントするように設定する必要があります。 例えば次が挙げられます。- task: DotNetCoreCLI@2 displayName: Run unit tests inputs: command: 'test' arguments: '-- --report-trx --results-directory $(Agent.TempDirectory)
.NET