この記事では、MSTest.Sdk の高度な構成オプションについて説明します。 基本的なセットアップと概要については、「 MSTest の概要」を参照してください。
重要
既定では、MSTest.Sdk では、dotnet テストを含め、Microsoft.Testing.Platform で MSTest ランナーが使用されます。 これには、CI 呼び出しとローカル CLI 呼び出しを変更する必要があり、 .runsettings の使用可能なエントリにも影響します。 VSTest に切り替えることで、古い統合とツールを維持できます。
MSTest.Sdk では、既定で EnableMSTestRunner と TestingPlatformDotnetTestSupport が true に設定されます。 dotnet テストとそのさまざまなモードの詳細については、「 dotnet テストを使用したテスト」を参照してください。
ユーティリティ ヘルパー ライブラリをテストする
MSTest.Sdk を使用するプロジェクトがテスト ユーティリティ ヘルパー ライブラリであり、単独で実行可能なテストが含まれていない場合は、プロジェクトに <IsTestApplication>false</IsTestApplication>する必要があります。
ランナーを選択する
既定では、MSTest SDK は Microsoft.Testing.Platform に依存していますが、プロパティ を追加することで、VSTest <UseVSTest>true</UseVSTest> に切り替えることができます。
Microsoft.Testing.Platform の拡張
Microsoft.Testing.Platform のエクスペリエンスを、一連の NuGet パッケージ拡張機能を使用してカスタマイズできます。 このエクスペリエンスを簡素化および改善するために、MSTest SDK では次の 2 つの機能が導入されています。
Microsoft.Testing.Platform プロファイル
"プロファイル" の概念によって、テスト プロジェクトに適用されることになる構成と拡張機能の既定のセットを選択することができます。
プロファイルを設定するには、プロパティ TestingExtensionsProfile を使用して以下の 3 つのプロファイルのいずれかを指定します。
None- 拡張機能は何も有効化されません。Default- このバージョンの MSTest.SDK に対して推奨される拡張機能が有効になります。 これは、プロパティが明示的に設定されていない場合の既定値です。以下の拡張機能が有効になります。
AllMicrosoft- Microsoft からのすべての拡張機能 (制限付きライセンスの拡張機能も含まれます) が有効になります。以下の拡張機能が有効になります。
None プロファイルを使用する完全な例を次に示します。
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
</Project>
| 拡張機能/プロファイル | なし | 既定値 | AllMicrosoft |
|---|---|---|---|
| コード カバレッジ | ✔️ | ✔️ | |
| クラッシュ ダンプ | ✔️ | ||
| 偽物 | ✔️¹ | ||
| ハングダンプ | ✔️ | ||
| ホット リロード | ✔️ | ||
| 再試行 | ✔️ | ||
| Trx | ✔️ | ✔️ | |
| AzureDevOpsReport | ✔️² |
¹ MSTest.Sdk 3.7.0+ ² MSTest.Sdk 3.11.0 以降
拡張機能を有効または無効にする
拡張機能を有効または無効にするには、Enable[NugetPackageNameWithoutDots] というパターンの MSBuild のプロパティを使用します。
たとえば、クラッシュ ダンプ拡張機能 (NuGet パッケージ Microsoft.Testing.Extensions.CrashDump) を有効にするには、次のようにプロパティ EnableMicrosoftTestingExtensionsCrashDump を true に設定します。
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>
</Project>
利用可能なすべての拡張機能の一覧については、「Microsoft.Testing.Platform 拡張機能」を参照してください。
警告
拡張機能ごとにライセンス条件が異なる場合があるため、確認することが重要です。
拡張機能の有効化と無効化の指定は、選択済みの拡張機能プロファイルでの拡張機能の指定と結合されます。
このプロパティ パターンを使用すると、暗黙的な Default プロファイルの上に追加の拡張機能を有効にすることができます (前の CrashDumpExtension の例を参照)。
選択したプロファイルからの拡張機能を無効にすることもできます。 たとえば、 MS Code Coverageを設定して <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>拡張機能を無効にします。
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
</Project>
機能
ランナーとランナー固有の拡張機能の選択以外にも、 MSTest.Sdk はテスト エクスペリエンスを簡素化および強化するための追加機能も提供します。
アスパイアを使用してテストする
アスパイアは、監視可能で運用環境に対応した分散アプリケーションを構築するための、クラウド対応のオピニオンスタックです。 アスパイアは、特定のクラウドネイティブの懸念事項を処理する NuGet パッケージのコレクションを通じて提供されます。 詳細については、 アスパイアのドキュメントを参照してください。
注
この機能は、MSTest.Sdk 3.4.0 から入手できます。
プロパティ EnableAspireTesting を true に設定すると、 using および Aspireを使用したテストに必要なすべての依存関係とデフォルトの MSTest ディレクティブを導入できます。
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableAspireTesting>true</EnableAspireTesting>
</PropertyGroup>
</Project>
Playwrightでテストする
Playwright を使うと、モダン Web アプリに対して信頼性の高いエンドツーエンド テストを実行できます。 詳細については、公式の Playwright のドキュメントを参照してください。
注
この機能は、MSTest.Sdk 3.4.0 から入手できます。
プロパティ EnablePlaywright を true に設定すると、 using および Playwright を使用したテストに必要なすべての依存関係とデフォルトの MSTest ディレクティブを取り込むことができます。
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnablePlaywright>true</EnablePlaywright>
</PropertyGroup>
</Project>
MSTest SDKへの移行
MSTest SDK に移行するために必要な次の手順を検討してください。
プロジェクトを更新する
既存の MSTest テスト プロジェクトを MSTest SDK に移行するときは、最初にテスト プロジェクトの先頭にある Sdk="Microsoft.NET.Sdk" エントリを Sdk="MSTest.Sdk" で置き換えます。
- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"
global.json にバージョンを追加します。
{
"msbuild-sdks": {
"MSTest.Sdk": "4.1.0"
}
}
これで、プロジェクトのシンプル化を開始できます。
デフォルトのプロパティを削除します:
- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>
デフォルトのパッケージ参照を削除します:
- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"
最後に、使用している拡張機能プロファイルに基づいて Microsoft.Testing.Extensions.* パッケージの一部を削除することもできます。
CI を更新する
プロジェクトを更新したら、 Microsoft.Testing.Platform (デフォルト) を使用しており、テストの実行に dotnet test に依存している場合は、CI 構成を更新する必要があります。 詳細情報と必要なすべての変更の理解については、 dotnet test integrationを参照してください。
dotnet testの VSTest モードを使用している場合は、Azure DevOps で DotNetCoreCLI タスクを使用するときの更新例を次に示します。
\- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/**.sln'
- arguments: '--configuration Release'
+ arguments: '--configuration Release -- --report-trx --results-directory $(Agent.TempDirectory) --coverage'
既知の制限事項
NuGet が提供する MSBuild SDK (MSTest.Sdk を含む) では、バージョンの更新に関して ツールのサポートが制限 されています。つまり、NuGet パッケージを管理するための通常の NuGet 更新と Visual Studio UI が期待どおりに動作しません。
global.json ファイルとプロジェクト ファイルのバージョンを手動で更新する必要があります。 (これは、dependabot-core#12824 と dependabot-core#8615 の問題が原因で Dependabot を使用する場合でも適用されます)。
関連項目
.NET