MSTest SDK の構成

この蚘事では、MSTest.Sdk の高床な構成オプションに぀いお説明したす。 基本セットアップず開始方法に぀いおは、MSTest の開始方法を参照しおください。

重芁

既定では、MSTest.Sdk はMTP 付き MSTest ランナヌを䜿甚し、dotnet テストでも同様です。 これには、CI 呌び出しずロヌカル CLI 呌び出しを倉曎する必芁があり、 .runsettings の䜿甚可胜な゚ントリにも圱響したす。 VSTest に切り替えるこずで、叀い統合ずツヌルを維持できたす。

MSTest.Sdk では、既定で EnableMSTestRunner ず TestingPlatformDotnetTestSupport が true に蚭定されたす。 dotnet テストずそのさたざたなモヌドの詳现に぀いおは、「 dotnet テストを䜿甚したテスト」を参照しおください。

ナヌティリティ ヘルパヌ ラむブラリをテストする

MSTest.Sdk を䜿甚するprojectがテスト ナヌティリティ ヘルパヌ ラむブラリであり、それ自䜓に実行可胜なテストが含たれおいない堎合、projectには <IsTestApplication>false</IsTestApplication> が必芁です。

ランナヌを遞択する

既定では、MSTest SDK は MTP に䟝存しおいたすが、プロパティ を远加するこずで <UseVSTest>true</UseVSTest> に切り替えるこずができたす。

Windows アプリケヌション モデルをテストする

MSTest.Sdk 4.5 以降、既定の MTP ランナヌでは、次のWindows アプリケヌション モデルがサポヌトされおいたす。

  • uap10.0を察象ずする埓来の UWP プロゞェクト。
  • .NET 10 を䜿甚し、UseUwpをtrueに蚭定する最新の UWP プロゞェクト。
  • パッケヌゞ化された完党信頌 WinUI 3 プロゞェクト。
  • パッケヌゞ化されおいない WinUI 3 プロゞェクト。
  • packagedClassicApp を蚭定する WinUI 3 TrustLevel="appContainer" プロゞェクト。

MSTest.Sdk は、互換性のある MTP 2.5 コンポヌネントを提䟛し、パッケヌゞ化されたテスト ホストず AppContainer テスト ホスト甚の完党信頌アプリ モデル サむドカヌを開始したす。 サむドカヌはパッケヌゞを登録し、AUMID によっお遞択されたアプリケヌションをアクティブ化し、AppContainer 通信甚の正確なパッケヌゞ SID を承認し、パッケヌゞ ストレヌゞから結果成果物を回埩したす。

UWP プロゞェクトでは、ビルド時のサポヌトのために、Visual Studio UWP ワヌクロヌドずデスクトップ MSBuild が匕き続き必芁です。 Microsoft.NET.Test.Sdk、vstest.console、たたは Visual Studio UWP テスト ランタむム プロバむダヌは必芁ありたせん。

プロゞェクトの構成、コマンドの実行、サンプルに぀いおは、「 MSTest ず MTP を䜿甚しお UWP アプリず WinUI 3 アプリをテストする」を参照しおください。

MSTest.Sdk 4.5 プレビュヌ以降では、EnableWindowsUIAutomationを true に蚭定しお、䞀臎するMSTest.Windows.UIAutomation パッケヌゞをWindows察象プロゞェクトに远加したす。 この機胜は、UWP たたは WinUI アプリ内でテストをホストするのではなく、パッケヌゞ化されおいない倖郚の Win32、Windows フォヌム、たたはWPF アプリケヌションを起動しお自動化したす。 詳现に぀いおは、「MSTest UI オヌトメヌション を䜿甚しおデスクトップ アプリWindowsテストする」を参照しおください。

MTP の拡匵

䞀連の NuGet パッケヌゞ拡匵機胜を䜿甚しお MTP ゚クスペリ゚ンスをカスタマむズできたす。 この゚クスペリ゚ンスを簡玠化および改善するために、MSTest SDK では次の 2 ぀の機胜が導入されおいたす。

MSTest 4.4 以降、MSTest アダプタヌはネむティブ MTP 統合を䜿甚し、 Microsoft.Testing.Extensions.VSTestBridgeに䟝存しなくなりたした。 MTP テスト アプリケヌションが VSTest アダプタヌを介しおフレヌムワヌクを実行する必芁がある堎合にのみ、ブリッゞを明瀺的に参照したす。

Microsoft.Testing.Platform プロファむル

profiles の抂念では、テスト projectに適甚される構成ず拡匵機胜の既定のセットを遞択できたす。

プロファむルを蚭定するには、プロパティ TestingExtensionsProfile を䜿甚しお以䞋の 3 ぀のプロファむルのいずれかを指定したす。

  • None - 拡匵機胜は䜕も有効化されたせん。

  • Default - このバヌゞョンの MSTest.SDK に察しお掚奚される拡匵機胜が有効になりたす。 これは、プロパティが明瀺的に蚭定されおいない堎合の既定倀です。

    以䞋の拡匵機胜が有効になりたす。

  • AllMicrosoft- 制限付きのラむセンスの拡匵機胜を含め、暙準で幅広く利甚できるよう遞定された Microsoft 拡匵機胜を有効にしたす。 詊隓的および API 専甚の拡匵機胜では、匕き続き明瀺的なオプトむンが必芁な堎合がありたす。

    Default プロファむルのすべおの拡匵機胜ず、次の拡匵機胜を有効にしたす。

    MSTest.Sdk バヌゞョン 3.11.0 から 4.2.x では、Azure DevOps レポヌト拡匵機胜はAllMicrosoftにのみ含たれたす。

泚

プロファむルはAzure DevOps レポヌト パッケヌゞず GitHub Actions レポヌト パッケヌゞを参照したすが、実行時にレポヌトは無効のたたです。 --report-azdoを枡しお、Azure DevOpsレポヌトを有効にしたす。 GitHub Actionsレポヌトを有効にするには、GitHub Actionsでテストを実行し、--report-ghに合栌したす。

None プロファむルを䜿甚する完党な䟋を次に瀺したす。

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

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

</Project>
拡匵機胜/プロファむル なし 既定倀 AllMicrosoft
コヌド カバレッゞ ✔ ✔
クラッシュ ダンプ ✔
停物 ✔¹
ハングダンプ ✔
ホット リロヌド ✔
HTML レポヌト ✔
GitHub Actions レポヌト ✔³ ✔³
再詊行 ✔
Trx ✔ ✔
Azure DevOps レポヌト ✔³ ✔²

¹ MSTest.Sdk 3.7.0+ ² MSTest.Sdk 3.11.0+ ² MSTest.Sdk 4.3.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>

䜿甚可胜なすべおの拡匵機胜の䞀芧に぀いおは、 MTP 機胜を参照しおください。

䞀郚の MTP 拡匵機胜はオプトむンのたたであり、 Default プロファむルや AllMicrosoft プロファむルには含たれたせん。

  • MSTest.Sdk 4.3 以降では、 <EnableMicrosoftTestingExtensionsJUnitReport>true</EnableMicrosoftTestingExtensionsJUnitReport>を蚭定し、 --report-junit枡したす。
  • MSTest.Sdk 4.4 以降では、 <EnableMicrosoftTestingExtensionsCtrfReport>true</EnableMicrosoftTestingExtensionsCtrfReport>を蚭定し、 --report-ctrf枡したす。
  • OpenTelemetry 拡匵機胜を参照するには、 <EnableMicrosoftTestingExtensionsOpenTelemetry>true</EnableMicrosoftTestingExtensionsOpenTelemetry>蚭定したす。 拡匵機胜には API 構成が必芁であるため、 OpenTelemetry の説明に埓っおカスタム ゚ントリ ポむントに登録したす。

これらの拡匵機胜は MTP でのみ䜿甚できたす。

譊告

拡匵機胜ごずにラむセンス条件が異なる堎合があるため、確認するこずが重芁です。

拡匵機胜の有効化ず無効化の指定は、遞択枈みの拡匵機胜プロファむルでの拡匵機胜の指定ず結合されたす。

このプロパティ パタヌンを䜿甚するず、暗黙的な 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 4.3.0 以降では、Default プロファむルはAzure DevOps レポヌト パッケヌゞず GitHub Actions レポヌト パッケヌゞを参照したす。 パッケヌゞ参照を削陀するには、 <EnableMicrosoftTestingExtensionsAzureDevOpsReport>false</EnableMicrosoftTestingExtensionsAzureDevOpsReport> たたは <EnableMicrosoftTestingExtensionsGitHubActionsReport>false</EnableMicrosoftTestingExtensionsGitHubActionsReport>を蚭定したす。 パッケヌゞ参照を保持する堎合、Azure DevOpsレポヌトは、--report-azdoを枡したずきにのみ開始されたす。 GitHub Actionsレポヌトは、GitHub Actionsでテストを実行し、--report-ghに合栌した堎合にのみ開始されたす。

機胜

ランナヌずランナヌ固有の拡匵機胜の遞択以倖にも、 MSTest.Sdk はテスト ゚クスペリ゚ンスを簡玠化および匷化するための远加機胜も提䟛したす。

Aspire を甚いおテストする

Aspire は、監芖可胜で運甚環境に察応した分散アプリケヌションを構築するための、クラりド察応のオピニオンスタックです。 Aspire は、特定のクラりドネむティブの懞念事項を凊理する NuGet パッケヌゞのコレクションを通じお配信されたす。 詳现に぀いおは、 Aspire ドキュメントを参照しおください。

泚

この機胜は、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でテストする

プレむラむトは、最新のweb appsに察しお信頌性の高い゚ンドツヌ゚ンドのテストを可胜にしたす。 詳现に぀いおは、公匏の 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 に移行するために必芁な次の手順を怜蚎しおください。

projectを曎新する

既存の 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"
    }
}

その埌、projectの簡略化を開始できたす。

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

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

プロゞェクトを曎新したら、MTP (既定) を䜿甚しおいお、 dotnet test に䟝存しおテストを実行する堎合は、CI 構成を曎新する必芁がありたす。 詳现情報ず必芁なすべおの倉曎の理解に぀いおは、 dotnet test integrationを参照しおください。

dotnet test の VSTest モヌドを䜿甚しおいる堎合、Azure DevOpsで DotNetCoreCLI タスクを䜿甚する堎合の曎新䟋を次に瀺したす。

既定の MSTest.Sdk 拡匵機胜プロファむルは、远加されたオプションで必芁な Microsoft.Testing.Extensions.TrxReport パッケヌゞず Microsoft.Testing.Extensions.CodeCoverage パッケヌゞを提䟛したす。 None プロファむルを遞択した堎合は、オプションを䜿甚する前に䞡方の拡匵機胜を有効たたは参照したす。

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

リフレクション ゜ヌス ゞェネレヌタヌ

MSTest 4.3 では、独立バヌゞョン管理された詊隓的な MSTest.SourceGeneration パッケヌゞにリフレクション ゜ヌス ゞェネレヌタヌが導入されたした。 MSTest 4.4 以降、パッケヌゞは詊隓段階の状態から卒業し、MSTest バヌゞョンを䜿甚したす。

ネむティブ AOT プロゞェクトには、゜ヌス ゞェネレヌタヌが自動的に含たれたす。 MSTest.Sdk を䜿甚する NativeAOT 以倖のプロゞェクトの堎合は、 <EnableMSTestSourceGeneration>true</EnableMSTestSourceGeneration>を䜿甚しおオプトむンしたす。 MSTest.Sdk は、 MSTest.SourceGeneration、 MSTest.TestFramework、および MSTest.TestAdapter のバヌゞョンを MSTestVersionに合わせお調敎したす。

SDK では、䞭倮パッケヌゞ管理を䜿甚する再利甚可胜なテスト ラむブラリずプロゞェクトでの゜ヌス生成もサポヌトされおいたす。 䞀臎 MSTest.TestAdapter ランタむム フックを提䟛し、必芁な PackageVersion 項目を生成したす。

.NET Standard では、これらのランタむム フックはサポヌトされおいたせん。 .NET Standard タヌゲットの゜ヌス生成を有効にするず、SDK によっお次の゚ラヌが報告されたす。

必芁な MSTest.TestAdapter ランタむム フックが䜿甚できないため、.NET Standard タヌゲット フレヌムワヌクでは MSTest ゜ヌスの生成はサポヌトされおいたせん。

゜ヌス ゞェネレヌタヌは、コンパむル時にテストを怜出したす。 ゞェネレヌタヌがアクティブな堎合、テスト クラスは [TestClass] を継承するのではなく、盎接宣蚀する必芁がありたす。 MSTEST0069 アナラむザヌは、継承された[TestClass]に䟝存するクラスにフラグを蚭定したす。

MSTest 4.3.2 以降、トリミングされたプロゞェクトおよび Native AOT プロゞェクトでは、MSTestSourceGenMode は既定で ReflectionFree になりたす。 このモヌドでは、テスト圢状をサポヌトしおいる堎合に、生成されたメタデヌタずむンボヌカヌを䜿甚したす。 リフレクションをサポヌトするランタむムでは、MSTest は、サポヌトされおいない生成゚ントリ、たたは存圚しない生成゚ントリに察しお、リフレクションにフォヌルバックしたす。

MSTest 4.4 以降、リフレクションフリヌ生成では、 AttributeUsage や AllowMultipleを含む、完党な継承された属性メタデヌタが具䜓化されたす。 MTP では、プレヌンな同期 [TestMethod] および [DataRow] メ゜ッドの実行時の怜出ず怜蚌をバむパスできたす。 非同期テスト、カスタム テスト メ゜ッド属性、 DynamicData、カスタム ITestDataSource 実装、あいたいなテスト図圢では、フォヌルバック パスが䜿甚されたす。 VSTest は既存のパスも保持したす。

リフレクションフリヌ モヌドでは、次の蚺断が報告されたす。

ID サポヌトされおいないテスト図圢
AOTSG0001 静的テストクラス
AOTSG0002 ゞェネリック型で入れ子になったクラスを含む、ゞェネリック テスト クラスを開く
AOTSG0003 生成されたコヌドがアクセスできないクラス (ファむル ロヌカル クラス、プラむベヌトたたはプラむベヌトで保護された入れ子など)
AOTSG0004 ゞェネリック テスト メ゜ッド
AOTSG0005 ref、in、たたは out パラメヌタヌを䜿甚したテスト メ゜ッド

実隓的な機胜

次の MSTest 4.3 機胜は 詊隓段階です。 それらの公開 API は倉曎される堎合があり、実隓的な蚺断機胜を通じお提䟛されおいたす。 オプトむンするには、察応する蚺断 ID を確認したす。

ITestFilter によるプログラムによるテストのフィルタヌ

泚

MSTest 4.3.0 (詊隓段階) で導入されたした。

ITestFilterによっお登録された詊隓的な[TestFilterProviderAttribute]拡匵ポむントを䜿甚するず、テスト クラスが読み蟌たれる前に、各テストを実行するかどうかをプログラムで決定できたす。 これは、コマンド ラむン フィルタヌでは衚珟できないカスタム遞択ロゞックに圹立ちたす。

テスト クラスを読み蟌たずにメタデヌタを怜査する ITestFilter.Filter(TestFilterContext) を実装したす。

public sealed class MyFilter : ITestFilter
{
    public TestFilterResult Filter(TestFilterContext context) =>
        context.DisplayName.Contains("Nightly", StringComparison.Ordinal)
            ? TestFilterResult.Run : TestFilterResult.Drop;
}

テストを実行する TestFilterResult.Run を返す、結果なしで省略する Drop 、スキップされた結果を報告する Skip(reason) 。 MSTest は 1 ぀のフィルタヌ むンスタンスを同時に呌び出すこずができるため、実装はスレッド セヌフである必芁がありたす。 コマンド ラむン フィルタヌずテスト ゚クスプロヌラヌ フィルタヌは、 ITestFilter前に実行されたすが、 [Ignore] は埌で評䟡されたす。

MSTest 4.4 以降、.NET プロゞェクトでは、汎甚のタむプ セヌフな登録フォヌム [assembly: TestFilterProvider<MyFilter>]を䜿甚できたす。 その埌、コンパむラは、 MyFilter が ITestFilter を実装し、パラメヌタヌなしのパブリック コンストラクタヌを持っおいるこずを匷制したす。 ゞェネリック属性は、.NET Framework では䜿甚できたせん。 マルチタヌゲット プロゞェクトの堎合は、タヌゲット フレヌムワヌク プリプロセッサ シンボルを含む汎甚フォヌムたたは非ゞェネリック フォヌムを遞択したす。

#if NET
[assembly: TestFilterProvider<MyFilter>]
#else
[assembly: TestFilterProvider(typeof(MyFilter))]
#endif

MSTest 4.4 以降、 MSTEST0081 アナラむザヌは非ゞェネリック登録フォヌムを完党に怜蚌したす。 ゞェネリック フォヌムの堎合でも、耇数のプロバむダヌを登録するゞェネリック フィルタヌの皮類ずアセンブリが報告されたす。

TestRun.Current ず蚈画されたテスト

泚

MSTest 4.3.0 (詊隓段階) で導入されたした。

実隓甚 TestRun.Current API (RFC 014) は、蚈画されたテストのセットを含む、珟圚の実行に関する情報を公開するため、拡匵機胜ずフィクスチャは、実行がスケゞュヌルされおいる内容を怜査できたす。

既知の制限事項

NuGet が提䟛する MSBuild SDK (MSTest.Sdk を含む) には、バヌゞョンの曎新に関しお制限付きのツヌル サポヌトがありたす。぀たり、NuGet パッケヌゞを管理するための通垞の NuGet 曎新ずVisual Studio UI が想定どおりに動䜜したせん。 global.json ファむルずproject ファむルのバヌゞョンを手動で曎新する必芁がありたす。 (これは、dependabot-core#12824 および dependabot-core#8615 が原因で Dependabot を䜿甚した堎合でも適甚されたす)。

関連項目