MTP テスト プロジェクトは、直接実行 (またはデバッグ) できる実行可能ファイルとしてビルドされます。 コンソールやコマンドを実行する追加のテストはありません。 エラーが発生した場合、アプリは 0 以外の終了コードで終了します。これは、ほとんどの実行可能ファイルに一般的です。 既知の終了コードの詳細については、 MTP 出口コードを参照してください。
ヒント
コマンド ライン オプションを使用して、特定の --ignore-exit-code を無視できます。
TestingPlatformCommandLineArguments MSBuild プロパティを使用して、project ファイル内の特定のテスト projectに適用されるコマンド ライン オプションを設定することもできます。 一般的なユース ケースの 1 つは、すべてのテストが無視されたテスト プロジェクトの場合です。通常、終了コード 8 で終了します (テスト セッションではゼロ テストが実行されました)。 このシナリオでは、project ファイルの PropertyGroup の下に次を追加できます。
<TestingPlatformCommandLineArguments>$(TestingPlatformCommandLineArguments) --ignore-exit-code 8</TestingPlatformCommandLineArguments>
dotnet publish を使用してテスト projectを発行し、アプリを直接実行することは、テストを実行するもう 1 つの方法です。 たとえば、./Contoso.MyTests.exe を実行します。 一部のシナリオでは、dotnet build を使って実行可能ファイルを生成することもできますが、ネイティブ AOT などのエッジ ケースを考慮する必要がある場合があります。
dotnet run を使用する
dotnet run コマンドを使用して、テスト projectをビルドして実行できます。 これはテストを実行する最も簡単な方法ですが、最も時間がかかることがあります。
dotnet run の使用は、テストをローカルで編集して実行する場合に実用的です。これは、必要に応じてテスト projectが再構築されるようにするためです。
dotnet run では、現在のフォルダー内のプロジェクトも自動的に検索されます。
dotnet run --project Contoso.MyTests
dotnet run の詳細については、「dotnet run」を参照してください。
dotnet exec を使用する
dotnet exec または dotnet コマンドは、既にビルドされているテスト projectを実行 (または実行) するために使用されます。これは、アプリケーションを直接実行する代わりに使用します。
dotnet exec には、ビルドされたテスト プロジェクト dll へのパスが必要です。
dotnet exec Contoso.MyTests.dll
または
dotnet Contoso.MyTests.dll
注
テストプロジェクトの実行可能ファイル (*.exe) へのパスを指定すると、エラーが発生します。
Error:
An assembly specified in the application dependencies manifest
(Contoso.MyTests.deps.json) has already been found but with a different
file extension:
package: 'Contoso.MyTests', version: '1.0.0'
path: 'Contoso.MyTests.dll'
previously found assembly: 'S:\t\Contoso.MyTests\bin\Debug\net10.0\Contoso.MyTests.exe'
dotnet exec の詳細については、dotnet exec に関するページを参照してください。
dotnet test を使用する
.NET 10 SDK 以降、dotnet testには専用の MTP モードがあります。
global.jsonで MTP を選択するか、.NET 11 以降のDOTNET_TEST_RUNNER環境変数を使用します。 専用モードでは、新しい SDK バージョンのプロジェクト、ソリューション、ビルドされたテスト モジュール、追加の入力の種類がサポートされます。
dotnet test --test-modules Contoso.MyTests.dll
VSTest 互換モードからのランナーの選択と移行については、「dotnet testを使用したテスト」を参照してください。
MTP テストは、Visual Studioで実行 (およびデバッグ) でき、テスト エクスプローラーと統合され、スタートアップ プロジェクトとして直接実行することもできます。
Visual Studioを使用してアプリを実行する
MTP テスト プロジェクトは実行可能ファイルとしてビルドされ、直接実行できます。 これにより、フィルターが指定されていない限り、指定された実行可能ファイルのすべてのテストが実行されます。
- ソリューション エクスプローラーで実行するテスト projectに移動し、それを右クリックして [スタートアップ Project。
-
Debug>Start without Debugging を選択します (または、Ctrl+F5) を使用して、選択したテストプロジェクトを実行します。
コンソール ウィンドウがポップアップ表示され、テスト実行の実行内容と概要が表示されます。
Visual Studioでアプリを直接デバッグする
MTP テスト プロジェクトは直接デバッグできます。 フィルターが指定されていない限り、指定された実行可能ファイルのすべてのテストをデバッグするには、次のようにします。
- ソリューション エクスプローラーで実行するテスト projectに移動し、それを右クリックして [スタートアップ Project。
- デバッグするテストにブレークポイントを設定します。
-
Debug>Start Debugging (または F5 キーを押して) 選択したテスト projectをデバッグします。
ブレークポイントのあるテストに達するまで、すべてのテストが実行されます。 テストをステップ実行してデバッグします。 デバッグが完了したら、アプリを停止しない限り、残りのすべてのテストの実行が再開されます。
テスト エクスプローラーの使用
テストを実行するには、テスト エクスプローラーに移動して、実行する 1 つまたは複数のテストを選びます。 右クリックして、[実行] を選びます。 テストをデバッグする場合と同様に、テスト エクスプローラーで 1 つまたは複数のテストを選び、右クリックして [デバッグ] を選びます。
注
projectをビルドせずにテストを自動更新することはできません。
C# 拡張機能と C# Dev Kit を使用すると、Visual Studio コードでテストをデバッグ/実行できるほか、Visual Studio Code のテスト エクスプローラーとの統合を追加できます。
Visual Studio Code を使用してアプリを実行する
MTP テスト プロジェクトは実行可能ファイルとしてビルドされ、直接実行できます。 これにより、フィルターが指定されていない限り、指定された実行可能ファイルのすべてのテストが実行されます。
- テストを実行するテスト ファイルに移動してください。
-
Ctrl+F5 を使用して、選択したテスト projectを実行します。 複数のプロジェクトがある場合は、実行するプロジェクトを選択するように求めるポップアップが表示されます。
コンソール ウィンドウがポップアップ表示され、テスト実行の実行内容と概要が表示されます。
Visual Studio Code でアプリを直接デバッグする
MTP テスト プロジェクトは実行可能ファイルとしてビルドされ、直接実行できます。 これにより、フィルターが指定されていない限り、指定された実行可能ファイルのすべてのテストが実行されます。
- テストを実行するテスト ファイルに移動してください。
-
F5 を使用して、選択したテスト projectをデバッグします。 複数のプロジェクトがある場合は、実行するプロジェクトを選択するように求めるポップアップが表示されます。
ヒント
C# DevKit を使用して dotnet projectを実行するには、solution explorerからの実行や、対応する起動構成の作成など、他にもいくつかの方法があります。 これらは、Visual Studio Code のドキュメントで指定されています。
projectが実行されると、出力タブがポップアップ表示され、テスト実行の実行と概要が表示されます。
テスト エクスプローラーの使用
テストを実行するには、テスト エクスプローラーに移動して、実行する 1 つまたは複数のテストを選びます。 右クリックして、[実行] を選びます。 テストをデバッグする場合と同様に、テスト エクスプローラーで 1 つまたは複数のテストを選び、右クリックして [デバッグ] を選びます。
注
projectをビルドせずにテストを自動更新することはできません。
複数のテスト プロジェクトを並列で実行するには、すべてのテスト実行可能ファイルにパイプライン ステップを追加するのではなく、ソリューションに対して dotnet test を 1 回呼び出します。 MTP テスト プロジェクトをソリューションに追加すると、パイプラインを変更せずに同じコマンドでそれも含めることができます。
Azure Pipelines でソリューション ファイルを実行する
.NET 10 SDK 以降と MTP 1.7 以降を使用します。 ソリューション内のすべてのテスト プロジェクトで MTP をサポートする必要があります。VSTest のみのテスト プロジェクトは、このモードではサポートされていません。 以前のバージョンの SDK については、「 VSTest モードで MTP プロジェクトを実行する」を参照してください。
リポジトリ のルートで、次の内容を含む global.json ファイルを作成してください。 ファイルが既に存在する場合は、test セクションを追加し、SDK の設定で .NET 10 以降を選択していることを確認します。
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
TRX レポートの場合、各テスト プロジェクトは、Microsoft.Testing.Extensions.TrxReport を直接参照するか、それを含むテスト SDK 構成またはプロファイルを介して参照する必要があります。 詳細については、Visual Studioテスト レポート (TRX) を参照してください。
次の azure-pipelines.yml ファイルをリポジトリに追加してください。 この例では、 Contoso.sln と global.json がリポジトリ ルートにあることを前提としています。
Contoso.sln をソリューションのリポジトリ相対パスで置き換えます。
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- task: UseDotNet@2
displayName: Install .NET SDK
inputs:
packageType: sdk
version: 10.0.x
- task: DotNetCoreCLI@2
displayName: Run solution tests
inputs:
command: test
projects: Contoso.sln
arguments: --configuration Release --max-parallel-test-modules 4
workingDirectory: $(Build.SourcesDirectory)
publishTestResults: true
DotNetCoreCLI@2 タスクは、ソリューションごとに 1 回dotnet testを呼び出します。 このコマンドは依存関係を復元し、ソリューションをビルドし、その MTP テスト モジュールを並列で実行します。 既定では、 dotnet test は一度に最大 Environment.ProcessorCount モジュールを実行します。 この例では、--max-parallel-test-modules 4 を使用して同時実行数を 4 に制限します。 エージェントの CPU、メモリ、その他のリソースに合わせて制限を調整してください。
Important
projectsなどのプロジェクト ファイル パターンではなく、**/*.csprojでソリューション ファイルを選択します。 タスクは、一致したファイルごとに dotnet test を個別に呼び出します。 1 つのソリューション呼び出しにより、dotnet test がそのテスト プロジェクト全体で並列実行を調整できます。
モジュール レベルの並列処理は、モジュール内でのテストの並列実行とは別です。 アセンブリ内で並列テストを構成するには、テスト フレームワークの設定を使用します。 MSTest については、「 ParallelizeAttribute」を参照してください。
publishTestResults: trueでは、タスクは--report-trxと--results-directoryを追加し、テストが失敗した場合でも、パイプラインの実行の [テスト] タブにレポートを公開します。 0 以外の dotnet test 終了コードでも、タスクとパイプラインは失敗します。
注
DotNetCoreCLI@2での MTP のサポートには、タスク バージョン 2.263.0 以降が必要です。 タスクと .NET SDK の両方が MTP を選択するように、global.jsonをタスクの作業ディレクトリに置いてください。
スクリプトを使用してソリューションを実行する
MTP がサポートされていないタスク バージョンの場合、または CLI コマンドを直接制御する場合は、スクリプトを使用し、別の手順で TRX レポートを公開します。 同じ .NET SDK、global.json、および TRX 拡張機能の要件が適用されます。
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- task: UseDotNet@2
displayName: Install .NET SDK
inputs:
packageType: sdk
version: 10.0.x
- task: CmdLine@2
displayName: Run solution tests
inputs:
script: >-
dotnet test --solution Contoso.sln
--configuration Release
--max-parallel-test-modules 4
--results-directory "$(Agent.TempDirectory)"
--report-trx
workingDirectory: $(Build.SourcesDirectory)
- task: PublishTestResults@2
displayName: Publish test results
condition: succeededOrFailed()
inputs:
testResultsFormat: VSTest
testResultsFiles: '**/*.trx'
searchFolder: $(Agent.TempDirectory)
failTaskOnFailedTests: true
failTaskOnMissingResultsFile: true
succeededOrFailed()条件は、テストの実行が成功または失敗した後に結果を公開します。 スクリプトの 0 以外の終了コードは引き続きパイプラインを失敗させます。 モジュール間でレポートが上書きされないようにするには、すべてのモジュールに同じ TRX ファイル名を割り当てないでください。 名前付けと分離のオプションについては、「 レポート ファイル名」を参照してください。
1 つのテスト実行可能ファイルを実行する
1 つのテスト プロジェクトの場合は、実行可能ファイルを直接呼び出す前に、プロジェクトをビルドまたは発行します。
- task: CmdLine@2
displayName: "Run Contoso.MyTests"
inputs:
script: '.\Contoso.MyTests\bin\Debug\net10.0\Contoso.MyTests.exe'