次の方法で共有


MSTest SDK の概要

MSTest.Sdk は、MSTest アプリをビルドするための MSBuild プロジェクト SDK です。 この SDK を使用せずに MSTest アプリをビルドすることもできますが、MSTest SDK には次のような特長があります。

  • MSTest を使用したテストに最高のエクスペリエンスを提供するようにカスタマイズされています。
  • ほとんどのユーザーに推奨されるターゲットです。
  • 他のユーザーのための構成が簡単です。

MSTest SDK は、MSTest ランナーを使用してテストを検出して実行します。

プロジェクトで MSTest.Sdk を有効にするには、単にプロジェクトの Project ノードの Sdk 属性を更新します。

<Project Sdk="MSTest.Sdk/3.3.1">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

Note

/3.3.1 は SDK の最初のバージョンであるため例として示されていますが、新しいバージョンに置き換えることもできます。

バージョンの処理を簡素化するために、 global.json ファイルを使用してソリューション レベルで SDK バージョンを設定することをお勧めします。 たとえば、プロジェクト ファイルは次のようになります。

<Project Sdk="MSTest.Sdk">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

次に、 global.json ファイルで MSTest.Sdk バージョンを次のように指定します。

{
    "msbuild-sdks": {
        "MSTest.Sdk": "3.3.1"
    }
}

詳細については、MSBuild プロジェクト SDK に関する記事を参照してください。

プロジェクトを build すると、プロジェクトによって設定された標準の NuGet ワークフローを使用して、必要なすべてのコンポーネントが復元されインストールされます。

テストをビルドして実行するために必要なものはほかにありません。また、"クラシック" MSTest プロジェクトで使用されるのと同じツール (dotnet test、Visual Studio など) を使用できます。

重要

MSTest.Sdk に切り替えると、 dotnet test を含む MSTest ランナーの使用を選択することになります。 これには、CI とローカル CLI 呼び出しを変更する必要があり、 .runsettingsの使用可能なエントリにも影響します。 MSTest.Sdk を使用しても、ランナーを切り替えると、以前の統合やツールを維持することができます。

ランナーを選択する

デフォルトでは、MSTest SDK は MSTest ランナーに依存していますが、プロパティ <UseVSTest>true</UseVSTest>を追加することで VSTest に切り替えることができます。

MSTest ランナーを拡張する

MSTest runner のエクスペリエンスを、一連の NuGet パッケージ拡張機能を使用してカスタマイズできます。 このエクスペリエンスを簡素化および改善するために、MSTest SDK では次の 2 つの機能が導入されています。

MSTest ランナー プロファイル

"プロファイル" の概念によって、テスト プロジェクトに適用されることになる構成と拡張機能の既定のセットを選択することができます。

プロファイルを設定するには、プロパティ TestingExtensionsProfile を使用して以下の 3 つのプロファイルのいずれかを指定します。

  • Default - このバージョンの MSTest.SDK に対して推奨される拡張機能が有効になります。 これは、プロパティが明示的に設定されていない場合の既定値です。
  • None - 拡張機能は何も有効化されません。
  • AllMicrosoft - Microsoft からのすべての拡張機能 (制限付きライセンスの拡張機能も含まれます) が有効になります。

None プロファイルを使用する完全な例を次に示します。

<Project Sdk="MSTest.Sdk/3.3.1">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <TestingExtensionsProfile>None</TestingExtensionsProfile>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

拡張機能を有効または無効にする

拡張機能を有効または無効にするには、Enable[NugetPackageNameWithoutDots] というパターンの MSBuild のプロパティを使用します。

たとえば、クラッシュ ダンプ拡張機能 (NuGet パッケージ Microsoft.Testing.Extensions.CrashDump) を有効にするには、次のようにプロパティ EnableMicrosoftTestingExtensionsCrashDumptrue に設定します。

<Project Sdk="MSTest.Sdk/3.3.1">

<PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>

<!-- references to the code to test -->

</Project>

利用可能なすべての拡張機能の一覧については、「Microsoft.Testing.Platform 拡張機能」を参照してください。

警告

拡張機能ごとにライセンス条件が異なる場合があるため、確認することが重要です。

拡張機能の有効化と無効化の指定は、選択済みの拡張機能プロファイルでの拡張機能の指定と結合されます。

このプロパティ パターンを使用すると、暗黙的な Default プロファイルの上に追加の拡張機能を有効にすることができます (前の CrashDumpExtension の例を参照)。

選択したプロファイルからの拡張機能を無効にすることもできます。 たとえば、 <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>を設定して MS Code Coverage拡張機能を無効にします。

<Project Sdk="MSTest.Sdk/3.3.1">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

機能

ランナーとランナー固有の拡張機能の選択以外にも、 MSTest.Sdk はテスト エクスペリエンスを簡素化および強化するための追加機能も提供します。

.NET Aspire でテストする

.NET Aspire は、監視可能で本番環境に対応した分散アプリケーションを構築するための、独自のクラウド対応スタックです。 .NET Aspire は、クラウドネイティブの特定の懸念事項に対処する NuGet パッケージのコレクションによって提供されます。 詳細については、.NET Aspire のドキュメントを参照してください。

Note

この機能は MSTest.Sdk 3.4.0 以降で使用できます

プロパティ EnableAspireTestingtrue に設定すると、 Aspire および MSTestを使用したテストに必要なすべての依存関係とデフォルトの using ディレクティブを導入できます。

<Project Sdk="MSTest.Sdk/3.4.0">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnableAspireTesting>true</EnableAspireTesting>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

Playwrightでテストする

Playwright を使うと、モダン Web アプリに対して信頼性の高いエンドツーエンド テストを実行できます。 詳細については、公式の Playwright のドキュメントを参照してください。

Note

この機能は MSTest.Sdk 3.4.0 以降で使用できます

プロパティ EnablePlaywrighttrue に設定すると、 Playwright および MSTest を使用したテストに必要なすべての依存関係とデフォルトの using ディレクティブを取り込むことができます。

<Project Sdk="MSTest.Sdk/3.4.0">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnablePlaywright>true</EnablePlaywright>
    </PropertyGroup>

    <!-- references to the code to test -->

</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.3.1"
    }
}

これで、プロジェクトのシンプル化を開始できます。

デフォルトのプロパティを削除します:

- <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 を更新する

プロジェクトを更新したら、 MSTest runner (デフォルト) を使用しており、テストの実行に dotnet test に依存している場合は、CI 構成を更新する必要があります。 詳細情報と必要なすべての変更の理解については、 dotnet test integrationを参照してください。

Azure DevOps で DotNetCoreCLI タスクを使用する場合の更新例を次に示します。

\- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    projects: '**/**.sln'
-    arguments: '--configuration Release'
+    arguments: '--configuration Release -p:TestingPlatformCommandLineArguments="--report-trx --results-directory $(Agent.TempDirectory) --coverage"'

関連項目