MSTest.Sdk は、MSTest アプリをビルドするための MSBuild プロジェクト SDK です。 この SDK を使用せずに MSTest アプリをビルドすることもできますが、MSTest SDK には次のような特長があります。
- MSTest を使用したテストに最高のエクスペリエンスを提供するようにカスタマイズされています。
- ほとんどのユーザーに推奨されるターゲットです。
- 他のユーザーのための構成が簡単です。
既定では、MSTest SDK は Microsoft.Testing.Platform の MSTest ランナーを使用してテストを検出して実行します。 を指定して VSTest の使用に切り替えることができます。 <UseVSTest>true</UseVSTest>
プロジェクトで MSTest.Sdk
を有効にするには、単にプロジェクトの Sdk
ノードの Project
属性を更新します。
<Project Sdk="MSTest.Sdk/3.8.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
注
ここでは例として /3.8.3
が示されていますが、必要に応じて任意の新しいバージョンに置き換えることができます。
バージョンの処理を簡素化するために、 global.json ファイルを使用してソリューション レベルで SDK バージョンを設定することをお勧めします。 たとえば、プロジェクト ファイルは次のようになります。
<Project Sdk="MSTest.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
次に、MSTest.Sdk
ファイル内で、のバージョンを次のように指定します。
{
"msbuild-sdks": {
"MSTest.Sdk": "3.8.3"
}
}
詳細については、MSBuild プロジェクト SDK に関する記事を参照してください。
プロジェクトを build
すると、プロジェクトによって設定された標準の NuGet ワークフローを使用して、必要なすべてのコンポーネントが復元されインストールされます。
テストをビルドして実行するために他に必要なものはありません。また、"クラシック"なMSTestプロジェクトで使用されるのと同じツール (dotnet test
、Visual Studio など) を使うことができます。
重要
MSTest.Sdk
に切り替えることで、dotnet テストを含め、MSTest ランナーの使用を選択します (MSTest 用 Microsoft.Testing.Platform を有効にします)。 これには、CI とローカル CLI 呼び出しを変更する必要があり、 .runsettingsの使用可能なエントリにも影響します。
MSTest.Sdk
を使用しても、ランナーを切り替えると、以前の統合やツールを維持することができます。
既定では、MSTest.Sdk は EnableMSTestRunner
と TestingPlatformDotnetTestSupport
を true に設定します。 dotnet テストとその Microsoft.Testing.Platform を実行するためのさまざまなモードの詳細については、「 dotnet テストを使用したテスト」を参照してください。
ランナーを選択する
既定では、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/3.8.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
</Project>
拡張機能/プロファイル | なし | 既定値 | AllMicrosoft |
---|---|---|---|
コード カバレッジ | ✔️ | ✔️ | |
クラッシュ ダンプ | ✔️ | ||
偽物 | ✔️ (MSTest.Sdk 3.7.0 以降) | ||
ハングダンプ | ✔️ | ||
ホット リロード | ✔️ | ||
再試行 | ✔️ | ||
Trx | ✔️ | ✔️ |
拡張機能を有効または無効にする
拡張機能を有効または無効にするには、Enable[NugetPackageNameWithoutDots]
というパターンの MSBuild のプロパティを使用します。
たとえば、クラッシュ ダンプ拡張機能 (NuGet パッケージ Microsoft.Testing.Extensions.CrashDump) を有効にするには、次のようにプロパティ EnableMicrosoftTestingExtensionsCrashDump
を true
に設定します。
<Project Sdk="MSTest.Sdk/3.8.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>
</Project>
利用可能なすべての拡張機能の一覧については、「Microsoft.Testing.Platform 拡張機能」を参照してください。
警告
拡張機能ごとにライセンス条件が異なる場合があるため、確認することが重要です。
拡張機能の有効化と無効化の指定は、選択済みの拡張機能プロファイルでの拡張機能の指定と結合されます。
このプロパティ パターンを使用すると、暗黙的な Default
プロファイルの上に追加の拡張機能を有効にすることができます (前の CrashDumpExtension の例を参照)。
選択したプロファイルからの拡張機能を無効にすることもできます。 たとえば、 MS Code Coverage
を設定して <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
拡張機能を無効にします。
<Project Sdk="MSTest.Sdk/3.8.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
</Project>
機能
ランナーとランナー固有の拡張機能の選択以外にも、 MSTest.Sdk
はテスト エクスペリエンスを簡素化および強化するための追加機能も提供します。
.NET Aspire でテストする
.NET Aspire は、監視可能で本番環境に対応した分散アプリケーションを構築するための、独自のクラウド対応スタックです。 .NET Aspire は、クラウドネイティブの特定の懸念事項に対処する NuGet パッケージのコレクションによって提供されます。 詳細については、.NET Aspire のドキュメントを参照してください。
注
この機能は MSTest.Sdk 3.4.0 以降で使用できます
プロパティ EnableAspireTesting
を true
に設定すると、 using
および Aspire
を使用したテストに必要なすべての依存関係とデフォルトの MSTest
ディレクティブを導入できます。
<Project Sdk="MSTest.Sdk/3.4.0">
<PropertyGroup>
<TargetFramework>net8.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/3.4.0">
<PropertyGroup>
<TargetFramework>net8.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": "3.8.3"
}
}
これで、プロジェクトのシンプル化を開始できます。
デフォルトのプロパティを削除します:
- <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 が想定どおりに動作しません。 詳細については、この問題を参照してください。 NuGet#13127。
注
この制限は、MSTest SDK に固有のものではなく、NuGet で提供される MSBuild SDK に固有のものです。
Dependabot は、
関連項目
.NET