共用方式為


建立自訂擴充功能

本文是提供給為 Microsoft.Testing.Platform 建立自定義測試框架或擴充套件的開發者。

注意

完整範例程式碼請參閱 Microsoft 測試框架倉庫中的 TestingPlatformExamples

延伸點摘要

擴展點 進出流程 目標
ITestFramework 進行中 唯一強制的延期。 發現並執行測試。
IDataConsumer 進行中 訂閱並處理訊息匯流排的測試資料。
ITestSessionLifetimeHandler 進行中 在測試會話前後執行程式碼。
ITestApplicationLifecycleCallbacks 進行中 在測試主機的開始和最後執行程式碼。
ICommandLineOptionsProvider Both 新增自訂命令列選項。
ITestHostEnvironmentVariableProvider 程序外 在測試主機開始前設定環境變數。
ITestHostProcessLifetimeHandler 程序外 外部觀察測試主機的過程。

內部處理與外部處理的擴充功能

擴展可分為兩類:

  • 進程內擴充功能 會與測試框架同時執行於測試主機程序中。 請透過 builder.TestHost註冊:

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHost.AddXXX(/* ... */);
    
  • 進程外擴充功能在一個獨立的進程中執行,以監控測試主機程序。 透過builder.TestHostControllers註冊:

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHostControllers.AddXXX(/* ... */);
    

當需要進行程序外擴展時:

  • 你需要在測試主機開始前設定環境變數。
  • 你需要在外部監控測試主機,因為使用者程式碼可能會當機或掛起程序。

當任何程序外的擴展被註冊時,平台會自動啟動第二個程序。

IExtension 介面

所有擴展點都繼承自 IExtension,該提供識別及選擇性加入/退出。

public interface IExtension
{
    string Uid { get; }
    string Version { get; }
    string DisplayName { get; }
    string Description { get; }
    Task<bool> IsEnabledAsync();
}
  • Uid:擴充功能的唯一識別碼。 選擇一個獨特的數值以避免衝突。
  • Version:擴充功能的版本,使用 語意版本管理
  • DisplayName:一個使用者友善的名稱,會出現在日誌和 --info 輸出中。
  • Description:出現在 --info 輸出中的描述。
  • IsEnabledAsync(): 返回 false 以排除本次會議的延期。 通常決策是基於設定或命令列選項。
  • 建立測試框架:建立自訂 ITestFramework 實作、處理請求並回報測試結果。
  • 建置擴充功能:建立進程內與進程外擴充,如資料使用者、會話處理器與程序監控器。
  • VSTest 橋接:簡化現有基於 VSTest 的測試框架遷移至 Microsoft.Testing.Platform。
  • 功能:宣告與查詢框架及擴充功能。
  • 服務:存取設定、日誌、訊息匯流排及其他平台服務。