共用方式為


從 VSTest 移轉至 Microsoft.Testing.Platform

在本文中,您將瞭解如何從 VSTest 移轉至 Microsoft.Testing.Platform。

選擇加入以使用 Microsoft.Testing.Platform

移轉的第一個步驟是選擇加入使用 Microsoft.Testing.Platform。

針對所有測試框架,在解決方案中的所有測試專案加入 <OutputType>Exe</OutputType>。 之後,請遵照特定架構的指導。

MSTest

從 3.2.0 開始,MSTest 支援 Microsoft.Testing.Platform。 不過,建議您更新至最新的可用 MSTest 版本。

若要選擇加入,請在Directory.Build.props檔案的PropertyGroup標籤下新增<EnableMSTestRunner>true</EnableMSTestRunner>

備註

使用 MSTest.Sdk 時,預設會使用 Microsoft.Testing.Platform,除非指定 <UseVSTest>true</UseVSTest>

NUnit

從 5.0.0 開始,NUnit3TestAdapter 支援 Microsoft.Testing.Platform。

若要選擇加入,請在 Directory.Build.props 檔案中的 PropertyGroup 下新增 <EnableNUnitRunner>true</EnableNUnitRunner>

xUnit.net

從 xunit.v3 開始支援 Microsoft.Testing.Platform。

若要選擇加入,請在Directory.Build.props檔案中的PropertyGroup下添加<UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner>

dotnet test

選擇啟用 .NET 9 SDK 與更早版本

在 .NET 9 SDK 和更早版本中,沒有 Microsoft.Testing.Platform 的dotnet test支援。 支援建置在 VSTest 基礎結構之上。 要使用它,請在Directory.Build.props檔案中PropertyGroup下新增<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>

這很重要

在此模式中執行 Microsoft.Testing.Platform 支援時,您必須新增 -- 以將 dotnet test 引數與新的平臺引數分開。 例如: dotnet test --no-build -- --list-tests

選擇加入 .NET 10 SDK 和更新版本

從 .NET 10 SDK 開始,有 Microsoft.Testing.Platform 的 原生 支援。 若要使用它,您必須指定測試執行器,如 Microsoft.Testing.Platformglobal.json所示:

{
  "test": {
    "runner": "Microsoft.Testing.Platform"
  }
}

這很重要

在此模式下,不再使用額外的 -- 部分。

更新 dotnet test 呼叫

dotnet test 命令列選項分為兩類:與建置相關的參數和與測試相關的參數。

組建相關的引數與測試平台無關,因此不需要針對新平台進行更新。 此處列出與組建相關的引數:

  • -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> 與 Microsoft.Testing.Platform 無關
--blame 與 Microsoft.Testing.Platform 無關
--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> --test-parameterVSTestBridge提供)

--collect

--collect 是 VSTest 中任何資料收集器的一般擴充點。 Microsoft.Testing.Platform 的擴充性模型不同,而且所有資料收集器都沒有這類集中式引數可供使用。 使用 Microsoft.Testing.Platform,每個資料收集器都可以新增自己的命令列選項。 例如,透過 VSTest 執行 Microsoft CodeCoverage 可能類似下列內容:

dotnet test --collect "Code Coverage;Format=cobertura"

使用 Microsoft.Testing.Platform,這會變成:

dotnet test --coverage --coverage-output-format cobertura

這很重要

如先前所述,將 Microsoft.Testing.Platform 搭配 VSTest 型的 dotnet test 使用時,在要傳遞至平臺的引數之前,需額外新增 --。 所以,這變成了 dotnet test -- --coverage --coverage-output-format cobertura

--filter

--filter 是以 VSTest 為基礎的篩選器。

MSTest 和 NUnit 支援相同的篩選格式,即使使用 Microsoft.Testing.Platform 執行也一樣。

xUnit.net,在使用 Microsoft.Testing.Platform 執行時不支援相同的篩選格式。 您必須從以 VSTest 為基礎的篩選移轉至 xunit.v3 中的新篩選支援,這是使用下列命令列選項提供的。

xUnit.net 具體選項:

  • --filter-class
  • --filter-not-class
  • --filter-method
  • --filter-not-method
  • --filter-namespace
  • --filter-not-namespace
  • --filter-trait
  • --filter-not-trait
  • --filter-query

如需詳細資訊,請參閱 xUnit.net 的 Microsoft.Testing.Platform 檔xUnit.net 的查詢篩選語言

--logger

在 VSTest 中通常稱為「記錄器」的內容在 Microsoft.Testing.Platform 中稱為「報告器」。 在 Microsoft.Testing.Platform 中,記錄明確僅用於診斷目的。

類似於 --collect--logger 是 VSTest 中任何日誌器(或在 Microsoft.Testing.Platform 背景中,任何 報告器)的一般擴充點。 每個 Microsoft.Testing.Platform 報告者都可以自由新增自己的命令列選項,因此沒有像 VSTest 這樣的 --logger集中式命令列選項。

非常常用的 VSTest 記錄器之一是 TRX 記錄器。 此記錄器通常以下列方式調用:

dotnet test --logger trx

使用 Microsoft.Testing.Platform 時,命令會變成:

dotnet test --report-trx

這很重要

若要使用 --report-trx,您必須安裝 Microsoft.Testing.Extensions.TrxReport NuGet 套件。

這很重要

如前面所解釋的,當將 Microsoft.Testing.Platform 搭配 VSTest 型 dotnet test 使用時,在要傳遞至平臺的引數之前,需要額外的 --。 所以,這變成了 dotnet test -- --report-trx

--settings

VSTest 可用 --settings 來指定測試回合的 RunSettings 檔案。 核心 Microsoft.Testing.Platform 不支援 RunSettings,已被更現代化的testconfig.json組態檔所取代。 不過,MSTest 和 NUnit 在執行 Microsoft.Testing.Platform 時仍支援舊的 RunSettings,而且 --settings 仍受支援。

vstest.console.exe

如果您直接使用 vstest.console.exe ,我們建議將其替換為命令 dotnet test

測試總管

使用 Visual Studio 或 Visual Studio Code 測試總管時,您可能需要啟用 Microsoft.Testing.Platform 的支援。

Visual Studio

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

Visual Studio Code

Visual Studio Code 搭配 C# DevKit 支援 Microsoft.Testing.Platform。

Azure DevOps

使用 Azure DevOps 工作時,您可能需要更新管線以使用 Microsoft.Testing.Platform,視您使用的工作而定。

VSTest 工作

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

.NET Core CLI 任務

  • 如果您已將自訂的 arguments 傳遞至工作,請遵循 dotnet test 移轉的相同指導方針。

  • 如果您使用 DotNetCoreCLI 工作,而未透過檔案選擇 global.json 加入 .NET 10 SDK 和更新版本的原生 Microsoft.Testing.Platform 體驗,您必須將工作 arguments 設定為正確指向它用來指向的結果目錄,以及要求的 TRX 報告。 例如:

    - task: DotNetCoreCLI@2
      displayName: Run unit tests
      inputs:
        command: 'test'
        arguments: '-- --report-trx --results-directory $(Agent.TempDirectory)