共用方式為


MSTest SDK 概觀

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

  • 為了在使用 MSTest 進行測試時提供一流體驗而量身打造
  • 大部分使用者的建議目標。
  • 能輕鬆地為其他使用者進行設定。

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

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

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

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

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

</Project>

注意

/3.3.1 可作為範例,因為這是提供 SDK 的第一個版本,但其可以取代為任何較新的版本。

為了簡化版本的處理,我們建議使用 global.json 在解決方案層級設定SDK版本。 例如,您的專案檔看起來會像這樣:

<Project Sdk="MSTest.Sdk">

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

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

</Project>

然後,您會有一個指定 MSTest.Sdk 版本的 global.json 檔案,如下所示:

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

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

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

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

重要

切換至您已完全選擇使用 MSTest 執行器MSTest.Sdk (包括使用 dotnet test),這需要修改 CI 和本機 CLI 呼叫,也會影響 .runsettings 的可用項目。 您可以改為切換執行器來使用 MSTest.Sdk,並仍然保留舊版整合和工具。

選取執行器

根據預設,MSTest SDK 會依賴 MSTest 執行器,但您可以藉由新增屬性 <UseVSTest>true</UseVSTest> 輕鬆切換至 VSTest

擴充 MSTest 執行器

您可以透過一組 NuGet 套件延伸模組 來自訂 MSTest runner 體驗。 為了簡化並改善此體驗,MSTest SDK 引進了兩項功能。

MSTest 執行器設定檔

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

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

  • 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>

啟用或停用延伸模組

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

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

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

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

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

</Project>

此頁面會列出所有可用的 延伸模組

警告

請檢閱每個延伸模組的授權條款,因為可能會有所不同。

啟用和停用的延伸模組會結合所選延伸模組設定檔所提供的延伸模組。

這可用來在隱式 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 文件

注意

此功能可從 MSTest.Sdk 3.4.0 取得

藉由將屬性 EnableAspireTesting 設定為 true,您就可以使用 AspireMSTest 來測試所需的所有相依性和預設值。

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

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

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

</Project>

劇作家

Playwright 可針對新式 Web 應用程式啟用可靠的端對端測試。 如需詳細資訊,請參閱官方 Playwright 文件

注意

此功能可從 MSTest.Sdk 3.4.0 取得

藉由將屬性 EnablePlaywright 設定為 true,您就可以使用 PlaywrightMSTest 來測試所需的所有相依性和預設值。

<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/3.3.1"

- 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 整合,以引導您瞭解所有必要的變更。

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