共用方式為


MSTest SDK 概觀

MSTest.Sdk 是用來建置 MSTest 應用程式的 MSBuild 專案 SDK。 雖然沒有此 SDK 仍可建置 MSTest 應用程式,但 MSTest SDK 是:

  • 目的是針對 MSTest 測試提供一流的體驗。
  • 大部分使用者的建議目標。
  • 能輕鬆地為其他使用者進行設定。

MSTest SDK 會使用 MSTest 執行器探索並執行測試。

只要更新專案中 MSTest.Sdk 節點的 Sdk 屬性,即可在專案中啟用 Project

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

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

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

</Project>

注意

/3.6.3 會以範例的形式提供,而且可以取代為任何較新版本。

為了簡化版本管理,建議使用 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.6.3"
    }
}

如需詳細資訊,請參閱使用 MSBuild 專案 SDK

當您 build 專案時,會使用您的專案所設置的標準 NuGet 工作流程來還原並安裝所有必要的元件。

您不需要其他任何項目來建置和執行您的測試,並且可以使用相同的工具(例如,dotnet test 或 Visual Studio)進行「經典」MSTest 專案。

重要

透過切換到 MSTest.Sdk,您選擇使用 MSTest 執行器,這也適用於 dotnet test。 這需要修改 CI 和本機 CLI 呼叫,並且會影響 .runsettings 的可用項目。 您可以使用MSTest.Sdk並仍然保留舊版整合和工具,只需改為切換執行者即可。

選取跑者

預設情況下,MSTest SDK 依賴於 MSTest 執行器,但您可以透過新增屬性 來切換到 <UseVSTest>true</UseVSTest>

擴充 MSTest 執行器

您可以透過一組 NuGet 套件擴充功能來自訂 MSTest runner體驗。 為了簡化和改善這個體驗,MSTest SDK 引入了兩個功能:

MSTest 執行器設定檔

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

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

以下是使用 None 設定檔的完整範例:

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

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

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

</Project>
擴展/個人資料設定 沒有 預設 AllMicrosoft
程式代碼涵蓋範圍 ✔️ ✔️
損毀傾印 ✔️
假貨 ✔️ (MSTest.Sdk 3.7.0+)
暫停傾倒 ✔️
即時重新載入 ✔️
重試 ✔️
Trx ✔️ ✔️

啟用或停用延伸模組

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

例如,若要啟用損毀傾印延伸模組 (NuGet 套件 Microsoft.Testing.Extensions.CrashDump),您可以使用下列屬性 EnableMicrosoftTestingExtensionsCrashDump 設定為 true:

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

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

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

</Project>

有關所有可用擴充功能的清單,請參閱 Microsoft.Testing.Platform 擴充功能

警告

請務必檢查每個擴充功能的授權條款,因為它們可能會有所不同。

啟用和停用的擴充功能會與您所選擇的擴充功能設定檔提供的擴充功能結合。

這個屬性模式可以用來在隱式 Default 設定檔 (如先前的 CrashDumpExtension 範例所示) 之上啟用額外的擴充功能。

你也可以停用來自選定設定檔的擴充功能。 例如,透過設定 MS Code Coverage 來停用 <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage> 擴充功能:

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

    <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 文件

注意

此功能可從 MSTest.Sdk 3.4.0 取得

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

<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 文件

注意

此功能可從 MSTest.Sdk 3.4.0 取得

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

<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.6.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

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

以下是在 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"'

已知限制

NuGet 提供的 MSBuild SDK(包括 MSTest.Sdk)在更新其版本方面具有有限的工具支援,這表示用於管理 NuGet 套件的一般 NuGet 更新和 Visual Studio UI 無法如預期般運作。 如需詳細資訊,請參閱此問題:NuGet#13127

注意

此限制並非專屬於 MSTest SDK,而是任何 NuGet 提供的 MSBuild SDK。 Dependabot 會處理更新 global.json 檔案中的版本,但您必須 手動更新項目檔中的版本

另請參閱