Microsoft。擴充整合

這些擴充功能可將 Microsoft.Testing.Platform (MTP) 銜接至您的應用程式已在使用的 Microsoft.Extensions.*程式庫,讓平台和擴充元件都能透過與其餘程式碼相同的基礎結構運作。 每個擴充套件都需要額外的 NuGet 套件,如各節所述。

提示

使用 Microsoft.Testing.Platform.MSBuild 時,記錄套件會透過產生的進入點自動註冊。 設定套件需要一個 IConfiguration 執行個體,而主機套件則需要 TestingPlatformHostFactory 或自訂進入點,因此請依照各自的註冊章節進行設定。

伐木橋

日誌橋接器會將 Microsoft.Testing.Platform 的診斷日誌轉送到 ILogger,因此平台和擴充功能的日誌會透過你的應用程式已在使用的同一條 Microsoft.Extensions.Logging 管線傳遞。 你可以重用現有的日誌堆疊——Console、Debug、Serilog、Application Insights、OpenTelemetry 或自訂 ILoggerProvider 系統——而不必撰寫自訂的 MTP 記錄器服務。 此擴充功能需要 Microsoft.Testing.Extensions.Logging NuGet 套件。

Note

從 2.3.0 版本起,已支援 MTP。 此擴充仍屬實驗性質,未來版本可能會改變選項與輸出格式。

橋接器只有在平台的診斷日誌啟用時才會轉發每則訊息。 當平台的實際記錄層級為 None(預設值,除非你傳遞 --diagnostic)時,系統不會呼叫設定委派,也不會建立任何記錄器工廠。 你在 ILoggingBuilder 中設定的各類別篩選器可以縮小平台實際生效的診斷層級,但無法放寬該層級。

手動註冊

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddMicrosoftExtensionsLogging(logging => logging.AddConsole());

配置快照

實驗性 Microsoft.Testing.Extensions.Configuration 套件會將由應用程式擁有的 IConfiguration 唯讀快照加入 MTP 的設定管線。

在建置測試應用程式前,先註冊設定:

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddMicrosoftExtensionsConfigurationSnapshot(configuration);

預設情況下,快照使用順序 2。 MTP 命令列值(順序 0)與環境變數(順序 1)優先,快照優先於 testconfig.json (順序 3)。 當您的應用程式需要其他優先順序時,請傳入不同的順序。

MTP 在建立配置管線時 BuildAsync 會讀取快照。 後續的變更和重新載入通知不會擴散。 呼叫者保留設定的所有權,階層式金鑰保留標準 : 分隔符,註冊僅適用於當前程序。 即時設定物件不會跨越到獨立啟動的控制器或測試主機程序。

主機整合

實驗性 Microsoft.Testing.Extensions.Hosting 套件會在由應用程式擁有的 IHost 內執行 MTP。 主機仍是組合根,擁有其服務提供者、設定、日誌、OpenTelemetry 提供者、壽命及處置權。

對於產生的入口點,設 TestingPlatformHostFactory 為一個完全限定的靜態方法,回傳一個全新且未啟動 Task<IHost>的靜態方法:

<TestingPlatformHostFactory>Contoso.Tests.TestHost.CreateHost</TestingPlatformHostFactory>

當主機擁有 OpenTelemetry 提供者,且測試專案參考 Microsoft.Testing.Extensions.OpenTelemetry 時,將 TestingPlatformOpenTelemetryMode 設為 HostOwned。 產生的入口點會建立並處理主機,保留自註冊的擴充功能,並繞過工廠處理命令列 --help 與 --info。

對於自訂進入點,請在主機上呼叫 RunTestingPlatformAsync,並透過其回呼註冊測試框架。 此方法會匯入設定快照,將 MTP 診斷資訊轉送至主機的 ILoggerFactory,在 MTP 之前啟動主機,將主機與呼叫端的取消作業連結至 MTP,回傳 MTP 結束代碼,並在 finally 區塊中停止主機。 呼叫端仍會釋放主機。

保持標準輸出不出現主機啟動、關閉、記錄日誌及匯出器訊息,因為 MTP 會將其用於機器可讀模式,例如 --list-tests json、JSON-RPC 伺服器模式,以及 dotnet test 協定。 另外,搭配處理序重新啟動擴充功能使用時,也要避免在主機工廠中使用專用的全域資源,因為重試、崩潰傾印或停止回應傾印等情況,可能會在控制器處理序和子處理序中呼叫該工廠。

Important

設定與主機 API 使用 TPEXP 診斷 ID,未來版本可能會有所變動。 它們包含在 MTP 2.5 預覽套件中。