MTP 測試專案是以可執行檔的形式建置,可以直接執行(或除錯)。 沒有多餘的運行控制台或命令。 如果發生錯誤,應用程式會以非零結束代碼結束,這在大部分可執行檔中都是典型的。 欲了解更多已知出口代碼,請參見 MTP出口代碼。
小提示
您可以使用 命令列選項來忽略特定 --ignore-exit-code。
你也可以使用 TestingPlatformCommandLineArguments MSBuild 屬性,在專案檔案中設定要套用至特定測試專案的命令列選項。 其中一個常見的使用案例是,測試專案會忽略所有測試,通常會以結束代碼 8 結束(測試會話執行零測試)。 在這種情況下,你可以在 project 檔案中以 PropertyGroup 新增以下內容:
<TestingPlatformCommandLineArguments>$(TestingPlatformCommandLineArguments) --ignore-exit-code 8</TestingPlatformCommandLineArguments>
用 dotnet publish 發佈測試project並直接執行應用程式,也是另一種執行測試的方式。 例如,執行 ./Contoso.MyTests.exe。 在某些情況下,您也可以使用 dotnet build 來產生可執行檔,但可能會有邊緣案例需要考慮,例如 Native AOT。
使用 dotnet run
可以使用 dotnet run 指令來建立並執行你的測試project。 這是執行測試的最簡單方式,雖然有時最慢。 在本地編輯和執行測試時,使用 dotnet run 很實用,因為它確保測試 project 在需要時能被重建。
dotnet run 也會自動在目前資料夾中找到專案。
dotnet run --project Contoso.MyTests
如需 dotnet run的詳細資訊,請參閱 dotnet run。
使用 dotnet exec
dotnet exec 或 dotnet 指令用於執行(或執行)已建構的測試project,這是直接執行應用程式的替代方案。
dotnet exec 需要已建置測試專案 DLL 的路徑。
dotnet exec Contoso.MyTests.dll
或
dotnet Contoso.MyTests.dll
備註
提供測試project執行檔的路徑(*.exe)會產生錯誤:
Error:
An assembly specified in the application dependencies manifest
(Contoso.MyTests.deps.json) has already been found but with a different
file extension:
package: 'Contoso.MyTests', version: '1.0.0'
path: 'Contoso.MyTests.dll'
previously found assembly: 'S:\t\Contoso.MyTests\bin\Debug\net10.0\Contoso.MyTests.exe'
如需 dotnet exec的詳細資訊,請參閱 dotnet exec。
使用 dotnet test
從 .NET 10 SDK 開始,dotnet test就有專用的 MTP 模式。 透過 global.json 選擇 MTP,或在 .NET 11 或更新版本中使用 DOTNET_TEST_RUNNER 環境變數。 專用模式支援專案、解決方案、已建置測試模組,以及新版 SDK 中的額外輸入類型。
dotnet test --test-modules Contoso.MyTests.dll
如需了解測試執行器的選擇及如何從 VSTest 相容模式遷移,請參閱「使用 dotnet test 進行測試」。
MTP 測試可在 Visual Studio 中執行(及除錯),與測試檔案總管整合,也能直接作為啟動專案執行。
用 Visual Studio 執行這個應用程式
MTP 測試專案是以可執行檔形式建置,可以直接執行。 除非提供篩選條件,否則這會執行指定可執行檔中的所有測試。
- 在 方案總管 中導航你想執行的測試project,右鍵選擇,然後選擇 Set as Startup Project。
- 選擇 Debug>Start without Debugging(或使用 Ctrl+F5)來執行所選測試project。
控制台視窗會彈出,顯示測試運行的執行過程和摘要。
直接在 Visual Studio 中除錯應用程式
MTP 測試專案可以直接進行除錯。 若要偵錯指定可執行檔中的所有測試,除非有提供篩選條件:
- 在 方案總管 中導航你想執行的測試project,右鍵選擇,然後選擇 Set as Startup Project。
- 將斷點設置於您要偵錯的測試中。
- 請前往 Debug>Start Debugging(或按 F5)來除錯選擇的測試專案。
所有測試都會執行,直到到達有斷點的測試為止。 逐步進行測試以偵錯。 完成偵錯之後,應用程式會繼續執行所有剩餘的測試,除非您停止它。
使用測試總管
若要執行測試,請流覽至 [測試總管] ,選取要執行的測試(或測試)。 在其上按下滑鼠右鍵,然後選擇 執行。 類似於對測試進行偵錯,請在 [測試總管]中選取測試(或多個測試),以滑鼠右鍵點選並選擇 [偵錯]。
C# 擴充功能搭配 C# Dev Kit,允許你在Visual Studio程式碼中除錯/執行測試,並加入與 Visual Studio Code 測試檔案總管的整合。
用 Visual Studio Code 執行這個應用程式
MTP 測試專案是以可執行檔形式建置,可以直接執行。 除非提供篩選條件,否則這會執行指定可執行檔中的所有測試。
- 流覽至您要執行測試的測試檔案。
- 使用 Ctrl+F5 來執行選取的測試project。 如果您有多個項目,彈出視窗會要求您選取要執行的專案。
控制台視窗會彈出,顯示測試運行的執行過程和摘要。
直接在 Visual Studio Code 中除錯應用程式
MTP 測試專案是以可執行檔形式建置,可以直接執行。 除非提供篩選條件,否則這會執行指定可執行檔中的所有測試。
- 流覽至您要執行測試的測試檔案。
- 使用 F5 來除錯所選的測試project。 如果您有多個項目,彈出視窗會要求您選取要執行的專案。
當 project 執行時,輸出標籤會跳出,顯示你的測試執行和摘要。
使用測試總管
若要執行測試,請流覽至 [測試總管] ,選取要執行的測試(或測試)。 在其上按下滑鼠右鍵,然後選擇 執行。 類似於對測試進行偵錯,請在 [測試總管]中選取測試(或多個測試),以滑鼠右鍵點選並選擇 [偵錯]。
要同時執行多個測試專案,只需針對整個方案呼叫一次 dotnet test,而不是為每個測試可執行檔加上管線步驟。 當你將 MTP 測試專案加入解決方案時,同一指令會包含該專案,而無需變更管線。
在 Azure Pipelines 中執行方案
請使用 .NET 10 SDK 或更新版本,以及 MTP 1.7 或更新版本。 解決方案中的所有測試專案必須支援 MTP;此模式不支援僅支援 VSTest 的測試專案。 關於早期的 SDK 版本,請參見 以 VSTest 模式執行 MTP 專案。
在儲存庫根目錄建立 global.json 一個包含以下內容的檔案。 如果檔案已經存在,請新增該test區段,並確保其 SDK 設定中選擇 .NET 10 或更新版本。
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
對於 TRX 報告,每個測試專案都必須直接參考 Microsoft.Testing.Extensions.TrxReport,或透過包含 Microsoft.Testing.Extensions.TrxReport 的測試 SDK 配置或設定檔來參考。 詳情請參閱 Visual Studio 測試報告(TRX)。
將以下 azure-pipelines.yml 檔案加入您的儲存庫。 範例假設 Contoso.sln 和 global.json 都位於儲存庫根目錄。 以您解決方案的儲存庫相對路徑取代 Contoso.sln 中的內容。
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- task: UseDotNet@2
displayName: Install .NET SDK
inputs:
packageType: sdk
version: 10.0.x
- task: DotNetCoreCLI@2
displayName: Run solution tests
inputs:
command: test
projects: Contoso.sln
arguments: --configuration Release --max-parallel-test-modules 4
workingDirectory: $(Build.SourcesDirectory)
publishTestResults: true
DotNetCoreCLI@2 task 會針對解決方案叫用 dotnet test 一次。 指令會恢復相依性、建置解決方案,並平行執行其 MTP 測試模組。 預設情況下,dotnet test 一次最多可執行 Environment.ProcessorCount 個模組。 範例中 使用 --max-parallel-test-modules 4 來限制並行性為四個模組。 調整限制以符合你的代理程式的 CPU、記憶體和其他資源。
這很重要
在 projects 中選取方案檔案,而不是專案檔案模式(例如 **/*.csproj)。 任務會針對每個相符的檔案依序分別呼叫 dotnet test。 單一解決方案叫用可讓 dotnet test 協調其測試專案間的平行執行。
模組層級的平行性與模組內測試的平行執行是分開的。 要在組合件內設定平行測試,請使用測試架構的設定。 關於 MSTest,請參見 ParallelizeAttribute。
使用 publishTestResults: true時,任務會新增 --report-trx 和 --results-directory,並將報告發佈至管線執行的 測試 分頁,即使測試失敗。 非零 dotnet test 的退出碼也會讓任務和管線失敗。
備註
DotNetCoreCLI@2 需要任務版本 2.263.0 或更新版本,才能支援 MTP。 保持global.json在任務的工作目錄中,讓任務和 .NET SDK 都選擇 MTP。
用腳本執行解決方案
對於不支援 MTP 的任務版本,或若要直接控制 CLI 指令,請使用腳本並在獨立步驟中發佈 TRX 報告。 相同的 .NET SDK、global.json 和 TRX 擴充功能需求均適用。
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- task: UseDotNet@2
displayName: Install .NET SDK
inputs:
packageType: sdk
version: 10.0.x
- task: CmdLine@2
displayName: Run solution tests
inputs:
script: >-
dotnet test --solution Contoso.sln
--configuration Release
--max-parallel-test-modules 4
--results-directory "$(Agent.TempDirectory)"
--report-trx
workingDirectory: $(Build.SourcesDirectory)
- task: PublishTestResults@2
displayName: Publish test results
condition: succeededOrFailed()
inputs:
testResultsFormat: VSTest
testResultsFiles: '**/*.trx'
searchFolder: $(Agent.TempDirectory)
failTaskOnFailedTests: true
failTaskOnMissingResultsFile: true
該 succeededOrFailed() 條件會在測試執行成功或失敗後公布結果。 腳本的非零退出碼仍會導致管線失敗。 為了避免模組間的報表覆寫,不要把相同的 TRX 檔名分配給每個模組。 關於命名與隔離選項,請參見「報表檔案名稱」。
執行一個測試執行檔
對於單一測試專案,請先建置或發佈專案,再直接呼叫其執行檔:
- task: CmdLine@2
displayName: "Run Contoso.MyTests"
inputs:
script: '.\Contoso.MyTests\bin\Debug\net10.0\Contoso.MyTests.exe'