共用方式為


Microsoft.Testing.Platform 故障排除

本文包含針對 Microsoft.Testing.Platform的故障排除指引。

出口代碼

Microsoft.Testing.Platform 使用已知的退出碼來通報測試失敗或應用程式錯誤。 出口代碼從 和 0 開始,且為非負數。

退出代碼 詳細資訊
0 退出碼 0 表示成功。 所有被選中執行的測試都順利完成,且沒有錯誤。
1 1出口代碼表示未知錯誤,並充當萬用代碼。 如需更多錯誤資訊與細節,請參考輸出。
2 使用退出代碼 2 表示至少有一次測試失敗。
3 退出代碼 3 表示測試會話已被中止。 例如,可以使用 Ctrl+C 中止一個會話。
4 退出碼 4 表示已使用擴充功能的設定無效,測試會話無法執行。
5 退出碼 5 表示傳送給測試應用程式的命令列參數無效。
6 (已不再使用) 退出碼 6 不再由平台產生;先前表示測試會話使用未實作的功能。
7 退出代碼 7 表示測試會話無法成功完成,且很可能當機。 這可能是因為測試會話透過測試控制器的延伸點執行所致。
8 退出碼 8 表示測試會話沒有執行任何測試。
9 退出碼 9 表示已執行測試的最低執行政策被違反。
10 退出碼 10 表示測試介面卡(Testing.Platform Test Framework、MSTest、NUnit 或 xUnit)因與測試本身無關的基礎設施原因未能執行測試。 例如未能建立測試所需的夾具。
11 退出碼 11 表示測試程序將退出,當相依程序退出時。
12 退出碼 12 顯示測試會話無法執行,因為用戶端不支援任何支援的協定版本。
13 退出碼 13 表示測試會話因命令 --maximum-failed-tests 列選項達到最大失敗次數而停止。 欲了解更多資訊,請參閱 Microsoft.Testing.Platform CLI 選項參考中的選項部分

要啟用詳細日誌並排除問題,請參見 診斷紀錄

忽略特定的出口代碼

Microsoft.Testing.Platform 預設為嚴格,但允許可配置性。 因此,使用者可以決定哪些出口代碼要忽略(會回傳一個退出代碼 0 ,而非原本的退出代碼)。

要忽略特定的退出碼,可以使用 --ignore-exit-code 命令列選項或環境 TESTINGPLATFORM_EXITCODE_IGNORE 變數。 被接受的有效格式是以分號分隔的退出代碼列表,以忽略(例如, --ignore-exit-code 2;3;8)。 一個常見情境是,測試失敗不應該導致非零的退出代碼(即忽略退出代碼 2)。

診斷記錄

該平台內建診斷日誌,協助你排除測試執行時的疑慮。 你可以透過命令列選項或環境變數啟用診斷日誌。

命令列選項

下列 平台選項 提供針對測試應用程式進行疑難解答的實用資訊:

  • --info
  • --diagnostic
  • --diagnostic-synchronous-write
  • --diagnostic-verbosity
  • --diagnostic-file-prefix
  • --diagnostic-output-directory

環境變數

你也可以使用環境變數啟用診斷日誌:

環境變數名稱 Description
TESTINGPLATFORM_DIAGNOSTIC 若設為 1,則啟用診斷記錄功能。
TESTINGPLATFORM_DIAGNOSTIC_VERBOSITY 定義冗長層級。 可用的值為 TraceDebugInformationWarningErrorCritical
TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_DIRECTORY 診斷記錄的輸出目錄,如果未指定的話,檔案會產生在預設的 TestResults 目錄中。
TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_FILEPREFIX 記錄檔名稱的前置詞。 預設為 "log_"
TESTINGPLATFORM_DIAGNOSTIC_FILELOGGER_SYNCHRONOUSWRITE 強制內建檔案記錄器同步寫入記錄。 適用於如果程序崩潰時,您不想遺失任何日誌條目的情況。 這會讓測試執行變慢。

備註

環境變數的優先順序高於命令行自變數。

解決設定錯誤

Microsoft.Testing.Platform.MSBuild

以下是與 Microsoft.Testing.Platform.MSBuild 相關的常見設定錯誤。

錯誤 CS8892:方法 'TestingPlatformEntryPoint.Main(string[])' 不會被用作進入點,因為已經找到同步進入點 'Program.Main(string[])'。

在測試專案中手動定義進入點(Main),或從已經有進入點的應用程式參考測試專案,會導致與 Microsoft.Testing.Platform所產生的進入點發生衝突。 若要避免此問題,請採取下列其中一個步驟:

  • 請移除您手動定義的程式進入點,通常是位於 Main中的 方法,並讓測試平臺自動為您產生一個。

  • 藉由設定 <GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint> MSBuild 屬性來停用進入點的產生。

  • 在參考測試專案的項目中設定 Microsoft.Testing.Platform.MSBuild MSBuild 屬性,以完全停用 <IsTestingPlatformApplication>false</IsTestingPlatformApplication> 的可轉移相依性。 當您從非測試專案參考測試專案時,這是必要的,例如一個參考測試應用程式的主控台應用程式。

Microsoft.Testing.Extensions.Fakes

Fakes 錯誤 無法解決來自 COR_PROFILER_PATH 和 COR_PROFILER 環境變數的分析器路徑。

如果 bin 資料夾中沒有所有 Fakes 元件,就可能發生此錯誤。

  • 請確定專案使用 MSTest.SDK,或參考 Microsoft.Testing.Extensions.Fakes
  • 對於.NET Framework專案,請避免設定<PlatformTarget>AnyCPU</PlatformTarget>,因為這會導致NuGet無法將所有檔案複製到bin資料夾。