共用方式為


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 的專案是要成為測試公用程式協助程式庫,而且本身不包含任何可執行的測試,則專案應該具有 <IsTestApplication>false</IsTestApplication>

選取跑者

根據預設,MSTest SDK 依賴 Microsoft.Testing.Platform,但您可以藉由新增 屬性 來切換至 <UseVSTest>true</UseVSTest>

擴充 Microsoft.Testing.Platform

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

Microsoft.Testing.Platform 設定檔

設定檔的概念可讓您選取將套用至測試專案的一組預設設定和延伸模組。

您可以使用屬性 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] 來啟用和停用延伸模組。

例如,若要啟用記憶體傾印延伸模組 (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 應用程式啟用可靠的端對端測試。 如需詳細資訊,請參閱官方 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"
    }
}

然後,您便可以開始簡化專案。

移除預設屬性:

- <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 檔案和專案檔案中的版本。 (即使您因問題 dependabot-core#12824dependabot-core#8615 而使用 Dependabot,這也適用。

另請參閱