MSTest SDK 配置

本文介紹了 MSTest.Sdk 的進階設定選項。 如需基本設定和入門的說明,請參閱 MSTest 入門指南

重要

預設情況下,MSTest.Sdk 使用 MSTest 執行器搭配 Microsoft.Testing.Platform,包括與 dotnet test。 這需要修改你的 CI 和本地 CLI 呼叫,也會影響 .runsettings 的可用條目。 你可以 透過切換到 VSTest 來保留舊的整合和工具。

MSTest.Sdk 預設會將 EnableMSTestRunnerTestingPlatformDotnetTestSupport 設為 true。 欲了解更多關於 dotnet 測試及其不同模式的資訊,請參見 「使用 dotnet 測試測試」。

測試工具輔助函式庫

如果使用 MSTest.Sdk 的project是作為測試工具輔助函式庫,且本身不包含任何可執行的測試,該project應該是 <IsTestApplication>false</IsTestApplication>

選取跑者

預設情況下,MSTest SDK 依賴 Microsoft。Testing.Platform,但你也可以透過加上屬性 ,切換到 <UseVSTest>true</UseVSTest>

擴展 Microsoft。測試平台

你可以透過一組 Microsoft.Testing.Platform來自訂 體驗。 為了簡化和改善這個體驗,MSTest SDK 引入了兩個功能:

Microsoft。Testing.Platform 個人檔案

profiles 的概念允許你選擇將套用到測試project的預設配置與擴充套件。

您可以使用屬性 TestingExtensionsProfile,將配置檔設為下列三個配置檔之一:

以下是使用 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+

啟用或停用延伸模組

可以透過 MSBuild 屬性使用模式 Enable[NugetPackageNameWithoutDots] 來啟用和停用延伸模組。

例如,啟用 crash dump 擴充功能(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 還提供額外的功能,以簡化和提升測試體驗。

使用 Aspire 進行測試

Aspire 是一個有主見的雲端技術堆疊,用於建立可觀察、準備好運行於生產環境的分布式應用程式。 Aspire 是透過處理特定雲端原生問題的 NuGet 套件集合來傳遞。 如需詳細資訊,請參閱 Aspire 文件

注意

此功能可從 MSTest.Sdk 3.4.0 取得。

透過將屬性 EnableAspireTesting 設為 true,您可以引入所有測試 usingAspire 所需的依賴項和預設 MSTest 指令。

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

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

</Project>

使用 Playwright 進行測試

Playwright 讓現代 web apps 能夠可靠地進行端到端測試。 如需詳細資訊,請參閱官方 Playwright 文件

注意

此功能可從 MSTest.Sdk 3.4.0 取得。

透過將屬性 EnablePlaywright 設為 true,您可以引入所有測試 usingPlaywright 所需的依賴項和預設 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"
    }
}

接著你可以開始簡化你的 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

一旦你更新了專案,如果你使用 Microsoft.Testing.Platform(預設值),且依賴 dotnet test 來執行測試,你必須更新你的 CI 設定。 如需更多資訊並想了解所有必要的變更,請參閱「dotnet test 整合」

如果你使用的是 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 檔案和 project 檔案的版本。 (即使使用 Dependabot,這也同樣適用,因為問題dependabot-core#12824dependabot-core#8615。)

另請參閱