次の方法で共有


MSTest SDK の概要

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 は EnableMSTestRunnerTestingPlatformDotnetTestSupport を 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 プロファイルを使用する完全な例を次に示します。

<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) を有効にするには、次のようにプロパティ EnableMicrosoftTestingExtensionsCrashDumptrue に設定します。

<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 以降で使用できます

プロパティ EnableAspireTestingtrue に設定すると、 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 以降で使用できます

プロパティ EnablePlaywrighttrue に設定すると、 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 は、 ファイル内のバージョンの更新を処理しますが、プロジェクト ファイルのバージョンを手動で更新 必要があります。

関連項目