共用方式為


Microsoft.Testing.Platform 和 VSTest 比較

Microsoft.Testing.PlatformVSTest的輕量且可攜的替代方案,用於在命令列、持續整合 (CI) 管線、Visual Studio 測試總管和 Visual Studio Code 中執行測試。 在本文中,您將了解 MSTest 執行器與 VSTest 之間的主要差異。

測試執行的差異

測試會根據執行器以不同的方式執行。

執行 VSTest 測試

VSTest 隨附於 Visual Studio、.NET SDK,而且作為 Microsoft.TestPlatform NuGet 套件中的獨立工具。 VSTest 會使用執行器可執行檔來執行名為 vstest.console.exe 的測試,其可直接或透過 dotnet test 使用。

執行 Microsoft.Testing.Platform 測試

Microsoft.Testing.Platform 直接內嵌到您的測試專案,不會提供任何額外的可執行檔。 當您執行專案可執行檔時,您的測試就會執行。 如需執行 Microsoft.Testing.Platform 測試的詳細資訊,請參閱 Microsoft.Testing.Platform 概觀:執行和偵錯測試

命名空間和 NuGet 套件

如果要熟悉 Microsoft.Testing.Platform 和 VSTest,了解每個命名空間和 NuGet 套件的使用情況是很有幫助的。

VSTest 命名空間

VSTest 是測試工具的集合,也稱為測試平台。 VSTest 原始程式碼是開放原始碼,可在 microsoft/vstest GitHub 存放庫中取得。 此程式碼會使用 Microsoft.TestPlatform.* 命名空間。

VSTest 是可延伸的,而一般型別會放在 Microsoft.TestPlatform.ObjectModel NuGet 套件中。

Microsoft.Testing.Platform 命名空間

Microsoft.Testing.Platform 是依據 Microsoft.Testing.Platform NuGet 套件和 Microsoft.Testing.* 命名空間中的其他程式庫。 如同 VSTest,Microsoft.Testing.Platform 是開放原始碼,且具有 microsoft/testfx GitHub 存放庫。

通訊協定 (預覽)

注意

Visual Studio 測試總管支援自 17.10 以後的預覽版本中的 Microsoft.Testing.Platform 通訊協定。 如果您使用舊版 Visual Studio 執行/偵錯測試,測試總管將使用 vstest.console.exe 和舊的通訊協定來執行這些測試。

Microsoft.Testing.Platform 使用依據於 JSON-RPC 的協定在 Visual Studio 和測試執行程式流程之間進行通訊。 該協定記載在 MSTest GitHub 存放庫

VSTest 也會使用以 JSON 為基礎的通訊協定,但不是以 JSON-RPC 為基礎。

停用新的通訊協定

若要在 [測試總管] 中停用新通訊協定的使用,您可以編輯專案以新增下列屬性:<DisableTestingPlatformServerCapability>true</DisableTestingPlatformServerCapability>

可執行檔

VSTest 隨附多個可執行檔,特別是 vstest.console.exetesthost.exedatacollector.exe。 不過,MSTest 會直接內嵌到您的測試專案中,而且不會隨附任何其他可執行檔。 測試專案編譯的可執行檔可用來裝載所有測試工具,並且進行執行測試所需的所有工作。

從 VSTest 移轉

除了測試架構的特定步驟之外,您還需要更新測試基礎結構以配合 Microsoft.Testing.Platform

dotnet test

dotnet test 的命令行選項分為 2 個類別:建置相關的自變數和測試相關的自變數。

組建相關自變數會傳遞至 dotnet build 命令,因此不需要更新新平臺。 組建相關自變數如下:

  • -a|--arch <ARCHITECTURE>
  • --artifacts-path <ARTIFACTS_DIR>
  • -c|--configuration <CONFIGURATION>
  • -f|--framework <FRAMEWORK>
  • -e|--environment <NAME="VALUE">
  • --interactive
  • --no-build
  • --nologo
  • --no-restore
  • -o|--output <OUTPUT_DIRECTORY>
  • --os <OS>
  • -r|--runtime <RUNTIME_IDENTIFIER>
  • -v|--verbosity <LEVEL>

測試相關自變數為 VSTest 特定,因此必須轉換以符合新的平臺。 下表顯示 VSTest 自變數與新平台之間的對應:

VSTest 自變數 新的平臺參數
--test-adapter-path <ADAPTER_PATH> 不支援
--blame 不支援
--blame-crash --crashdump 需要 損毀傾印擴充功能
--blame-crash-dump-type <DUMP_TYPE> --crashdump-type 需要 損毀傾印擴充功能
--blame-crash-collect-always 不支援
--blame-hang --hangdump 需要 Hang Dump 擴充功能
--blame-hang-dump-type <DUMP_TYPE> --hangdump-type 需要 Hang Dump 擴充功能
--blame-hang-timeout <TIMESPAN> --hangdump-timeout 需要 Hang Dump 擴充功能
--collect <DATA_COLLECTOR_NAME> 取決於數據收集器
-d\|--diag <LOG_FILE> --diagnostic
--filter <EXPRESSION> 取決於選取的測試架構
-l\|--logger <LOGGER> 取決於記錄器
--results-directory <RESULTS_DIR> --results-directory <RESULTS_DIR>
-s\|--settings <SETTINGS_FILE> 取決於選取的測試架構
-t\|--list-tests --list-tests
-- <RunSettings arguments> 不支援

重要

指定任何 Microsoft.Testing.Platform 自變數之前,您需要新增 --,以分隔 dotnet test 自變數與新的平臺自變數。 例如,dotnet test --no-build -- --list-tests

vstest.console.exe

如果您直接使用 vstest.console.exe,建議您將它取代為 dotnet test 命令。

測試瀏覽器

使用 Visual Studio 或 Visual Studio Code 測試總管時,您可能需要啟用新測試平台的支援。

Visual Studio

Visual Studio 測試總管支援從 17.14 版開始的新測試平臺。 如果您使用舊版,您可能需要將Visual Studio更新為最新版本。

Visual Studio Code

Visual Studio Code 測試總管支援從 X 版開始的新測試平臺。

Azure DevOps

使用 Azure DevOps 工作時,您可能需要更新管線以使用新的測試平臺。

VSTest 工作

如果您在 Azure DevOps 中使用 VSTest 工作,您可以將它取代為 .NET Core 工作

.NET Core 工作

如果您使用 .NET Core 工作,則不需要變更。