在本文中,您將瞭解如何從 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-parameter ( VSTestBridge提供) |
--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)