Microsoft.Testing.Platform (MTP) を使用した dotnet テスト

この記事は、10 SDK 以降のバージョン.NET: ✔️ に適用されます

名前

dotnet test - MTP で単体テストを実行するために使用されるテスト ドライバーを.NETします。

概要

dotnet test
    [--project <PROJECT_PATH>]
    [--solution <SOLUTION_PATH>]
    [--test-modules <EXPRESSION>] 
    [--root-directory <ROOT_PATH>]
    [--max-parallel-test-modules <NUMBER>]
    [--config-file <CONFIG_FILE>]
    [--results-directory <RESULTS_DIRECTORY>]
    [--diagnostic-output-directory <DIAGNOSTIC_OUTPUT_DIRECTORY>]
    [--minimum-expected-tests <NUMBER>]
    [-a|--arch <ARCHITECTURE>]
    [-c|--configuration <CONFIGURATION>]
    [-f|--framework <FRAMEWORK>]
    [--os <OS>]
    [-r|--runtime <RUNTIME_IDENTIFIER>]
    [-v|--verbosity <LEVEL>]
    [--no-build]
    [--no-restore]
    [--no-ansi]
    [--no-progress]
    [--output <VERBOSITY_LEVEL>]
    [--show-test-results <OUTCOME>]
    [--no-launch-profile]
    [--no-launch-profile-arguments]
    [<args>...]

dotnet test -h|--help

Description

MTP を使用すると、 dotnet test は VSTest よりも高速に動作します。 テスト関連の引数は、テスト projectに登録されている拡張機能に関連付けられているため、修正されなくなりました。 さらに、MTP では、テストの実行時に globbing フィルターがサポートされます。 詳細については、 MTP を参照してください。

Important

拡張機能固有のオプションは MTP には組み込まれません。 対象となる各テスト アプリケーションでは、オプションを提供する拡張機能を登録する必要があります。 拡張機能の NuGet パッケージを直接追加するか、パッケージを含むテスト SDK 構成またはプロファイルを使用します。 それ以外の場合、オプションが認識されないため、終了コード 5 でテストの実行が失敗します。 dotnet test --help実行して、選択したテスト アプリケーションで使用できるオプションを確認し、シナリオ別の拡張機能オプションを参照してオプションのパッケージを見つけます。

Warnung

global.json経由で MTP をオプトインすると、dotnet testはすべてのテスト プロジェクトで MTP を使用することが想定されます。 いずれかのテスト プロジェクトで VSTest が使用されている場合はエラーです。

暗黙的な復元

復元を必要とするすべてのコマンド (dotnet restoredotnet newdotnet builddotnet rundotnet testdotnet publish など) によって暗黙的に実行されるため、dotnet pack を実行する必要がなくなりました。 暗黙的な復元を無効にするには、--no-restore オプションを使用します。

dotnet restore コマンドは、明示的な復元が理にかなっている特定のシナリオ ( Azure DevOps Services または復元がいつ行われるかを明示的に制御する必要があるビルド システムなど) で引き続き役立ちます。

NuGet フィードの管理方法については、dotnet restore のドキュメントをご覧ください。

オプション

一度に使用できるオプションは、--project--solution、または --test-modules のいずれかです。 これらのオプションを組み合わせることはできません。 また、--test-modulesを使用する場合、--arch--configuration--framework--os、または --runtimeを指定することはできません。 これらのオプションは、既にビルドされているモジュールには関係ありません。

  • --project <PROJECT_PATH>

    実行するproject ファイルのパス (フォルダー名または完全パス) を指定します。 指定しない場合は、既定で現在のディレクトリに設定されます。

  • --solution <SOLUTION_PATH>

    実行するソリューション ファイルのパス (フォルダー名または完全パス) を指定します。 指定しない場合は、既定で現在のディレクトリに設定されます。

  • --test-modules <EXPRESSION>

    ファイル グロビングを使用してテスト モジュールをフィルター処理します。 これらのテスト モジュールに属するテストのみが実行されます。

  • --root-directory <ROOT_PATH>

    --test-modules オプションのルート ディレクトリを指定します。 --test-modules オプションでのみ使用できます。

  • --max-parallel-test-modules <NUMBER>

    並列で実行できるテスト モジュールの最大数を指定します。 既定値は Environment.ProcessorCountです。

  • --config-file <CONFIG_FILE>

    テストの実行に使用する構成ファイルを指定します。 相対パスが指定されている場合は、現在のディレクトリに基づいて絶対パスに変換されます。 構成ファイルの設定の詳細については、 testconfig.jsonを参照してください。

  • --results-directory <RESULTS_DIRECTORY>

    テスト結果が格納されるディレクトリを指定します。 ディレクトリが存在しない場合は、作成されます。 相対パスが指定されている場合は、現在のディレクトリに基づいて絶対パスに変換されます。

  • --diagnostic-output-directory <DIAGNOSTIC_OUTPUT_DIRECTORY>

    診断出力が格納されるディレクトリを指定します。 ディレクトリが存在しない場合は、作成されます。 相対パスが指定されている場合は、現在のディレクトリに基づいて絶対パスに変換されます。

  • --minimum-expected-tests <NUMBER>

    実行する必要があるテストの最小数を指定します。 テストの実際の数が指定された最小値より少ない場合、テストの実行は終了コード 9 で失敗します。 終了コードの詳細については、 MTP 出口コードを参照してください。

  • -a|--arch <ARCHITECTURE>

    ターゲット アーキテクチャを指定します。 これは、ランタイム識別子 (RID) を設定する簡単な構文です。指定した値は、既定の RID と組み合わされます。 たとえば、win-x64 マシンで --arch x86 と指定すると、RID は win-x86 に設定されます。 このオプションを使用する場合は、-r|--runtime オプションは使用しないでください。 .NET 6 Preview 7 以降で使用できます。

  • -c|--configuration <CONFIGURATION>

    ビルド構成を定義します。 ほとんどのプロジェクトの既定値は Debug ですが、projectのビルド構成設定をオーバーライドできます。

  • -f|--framework <FRAMEWORK>

    テストを実行するターゲット フレームワークのターゲット フレームワーク モニカー (TFM)。 ターゲット フレームワークは、project ファイルでも指定する必要があります。

  • --os <OS>

    ターゲット オペレーティング システム (OS) を指定します。 これは、ランタイム識別子 (RID) を設定する簡単な構文です。指定した値は、既定の RID と組み合わされます。 たとえば、win-x64 マシンで --os linux と指定すると、RID は linux-x64 に設定されます。 このオプションを使用する場合は、-r|--runtime オプションは使用しないでください。 .NET 6 以降で使用できます。

  • -r|--runtime <RUNTIME_IDENTIFIER>

    テスト対象のターゲット ランタイム。

    .NET SDK 7 以降では、短い形式-rを使用できます。

    グローバル RuntimeIdentifier プロパティ (明示的に、または --arch--runtime、または --osを使用して) ソリューションのテストを実行することはサポートされていません。 代わりにRuntimeIdentifierを個々のproject レベルに設定します。

  • -v|--verbosity <LEVEL>

    コマンドの詳細レベルを設定します。 指定できる値は、q[uiet]m[inimal]n[ormal]d[etailed]、および diag[nostic] です。 詳細については、LoggerVerbosityを参照してください。

  • --no-build

    テスト projectが実行される前にビルドされていないことを指定します。 また、--no-restore フラグも暗黙的に設定します。

  • --no-restore

    コマンドの実行時に暗黙的な復元が実行されないように指定します。

  • --no-ansi

    ANSI エスケープ文字の画面への出力を無効にします。

  • --no-progress

    画面への進行状況の報告を無効にします。

  • --output <VERBOSITY_LEVEL>

    テスト結果の出力の詳細度を指定します。 有効な値は、 MinimalNormal、および Detailedです。 既定値は Normalです。 Minimal には MTP 2.4 プレビューが必要です。

  • --show-test-results <OUTCOME>

    結果で結果ブロックを選択します。 MTP 2.4 プレビューでは、 passedfailedskippedall、または noneを使用します。 failed値には、エラー、タイムアウト、取り消しも含まれます。

    passedfailed、およびskippedをコンマ、スペース、または繰り返しの--show-test-resultsオプションと組み合わせます。 allまたはnoneを別の値と組み合わせないでください。 この明示的なオプションは、オプションの順序に関係なく、 --output プリセットをオーバーライドします。

  • --no-launch-profile

    launchSettings.json を使用してアプリケーションを構成しないでください。 既定では、 launchSettings.json が使用され、環境変数とコマンド ライン引数をテスト実行可能ファイルに適用できます。

  • --no-launch-profile-arguments

    起動プロファイルで commandLineArgs によって指定された引数を使用してアプリケーションを実行しないでください。

  • --property:<NAME>=<VALUE>

    1 つ以上の MSBuild プロパティを設定します。 オプションを繰り返して、複数のプロパティを指定します。

    --property:<NAME1>=<VALUE1> --property:<NAME2>=<VALUE2>
    

    短い形式の -p--property に使用することができます。 同じことが /property:property=value に適用され、その短い形式は /pです。 使用可能な引数の詳細については、 dotnet msbuild のドキュメントを参照してください

  • -?|-h|--help

    コマンドの使用方法を示した説明を出力します。

  • args

    テスト アプリケーションに渡す追加の引数を指定します。 複数の引数を指定する場合は、空白で区切ります。 渡す内容の詳細と例については、 MTP の概要MTP の機能に関するページを参照してください。

    ヒント

    特定のプロジェクトに追加の引数を指定するには、TestingPlatformCommandLineArguments MSBuild プロパティを使用します。 このプロパティは、ソリューションがテスト フレームワーク (MSTest や xUnit.net など) を混在させたり、一部のプロジェクトのみが特定の拡張機能を参照したりする場合に特に便利です。 詳細については、「 テスト フレームワークまたは拡張機能が混在するソリューション」を参照してください。

ファイルへのトレース ログを有効にするには、環境変数 DOTNET_CLI_TEST_TRACEFILE を使用して、トレース ファイルへのパスを指定します。

引数をテスト アプリケーションに転送する

dotnet test は、認識されないトークンをテスト アプリケーションに転送します。 認識されないオプション名とその値の間に認識されたオプションが表示される場合、認識されたオプションを削除すると、残りのトークンがテスト アプリケーションのオプションにバインドされる方法が変わる可能性があります。 このあいまいさを回避するには、リテラル --の後にテスト アプリケーション引数を配置します。

dotnet test --results-directory TestResults -- --report-trx --report-trx-filename A.trx

前の例では、直接パッケージ参照として、またはそれを含むテスト SDK 構成を使用して、 Microsoft.Testing.Extensions.TrxReport パッケージが必要です。

同じパーサーの動作は、 dotnet rundotnet buildにも適用されます。 詳細な例については、リファレンスのdotnet run」を参照してください。

例示

  • 現在のディレクトリのprojectまたはソリューションでテストを実行します。

    dotnet test
    
  • TestProject projectでテストを実行します。

    dotnet test --project ./TestProject/TestProject.csproj
    
  • TestProjects ソリューションでテストを実行します。

    dotnet test --solution ./TestProjects/TestProjects.sln
    
  • TestProject.dll アセンブリを使用してテストを実行します。

    dotnet test --test-modules "**/bin/**/Debug/net10.0/TestProject.dll"
    
  • ルート ディレクトリ TestProject.dll アセンブリを使用してテストを実行します。

    dotnet test --test-modules "**/bin/**/Debug/net10.0/TestProject.dll" --root-directory "c:\code"
    
  • Microsoft Code Coverage 拡張機能を使用して、現在のディレクトリでテストを実行します。 テスト アプリケーションは、 Microsoft.Testing.Extensions.CodeCoverageを直接参照するか、それを含むテスト SDK 構成を使用して参照する必要があります。

    dotnet test --coverage
    
  • テストを実行し、特定のディレクトリに結果を格納します。

    dotnet test --results-directory ./TestResults
    
  • 特定のディレクトリで診断出力を使用してテストを実行します。

    dotnet test --diagnostic-output-directory ./Diagnostics
    
  • 少なくとも 10 個のテストが実行されていることを確認して、テストを実行します。

    dotnet test --minimum-expected-tests 10
    
  • TestProject project でテストを実行し、-bl (バイナリ ログ) 引数を msbuild に指定します。

    dotnet test --project ./TestProject/TestProject.csproj -bl
    
  • TestProject project でテストを実行し、MSBuild DefineConstants プロパティを DEV に設定します。

    dotnet test --project ./TestProject/TestProject.csproj -p:DefineConstants="DEV"
    

こちらも参照ください