共用方式為


Microsoft.Testing.Platform 功能

在 Microsoft.Testing.Platform 的內容中, 功能 是指 執行特定動作或提供特定資訊的可能性。 這是測試架構和延伸模組的方法,可 宣告功能以特定方式作,或將特定資訊提供給 要求者

要求者 可以是測試會話中涉及的任何元件,例如平臺、延伸模組或測試架構本身。

功能系統的主要目標是促進測試會話中相關元件之間的有效通訊,讓他們能夠正確交換資訊並符合其各自的需求。

引導式範例

讓我們考慮一個假設的範例,以示範功能系統的必要性。

備註

此範例僅供說明之用,目前未在 Microsoft.Testing.Platform 或任何測試架構內實作。

想像一個情境,您有一個擴充套件需要測試框架每次執行不超過一個測試。 此外,在每個測試之後,擴充功能必須知道該特定測試的CPU使用量。

若要容納上述案例,您需要從測試架構查詢下列情況:

  1. 它一次只能執行一個測試。
  2. 它可提供每個測試所耗用 CPU 數量的相關信息。

延伸模組如何判斷測試架構是否能夠在此模式中運作,並提供測試會話的CPU使用量資訊? 在 Microsoft.Testing.Platform 中,這項功能是由 介面的 Microsoft.Testing.Platform.Capabilities.ICapability 實作來表示:

// Base capabilities contracts

public interface ICapability
{
}

public interface ICapabilities<TCapability>
    where TCapability : ICapability
{
    IReadOnlyCollection<TCapability> Capabilities { get; }
}

// Specific testing framework capabilities

public interface ITestFrameworkCapabilities : ICapabilities<ITestFrameworkCapability>
{
}

public interface ITestFrameworkCapability : ICapability
{
}

如您所見,ICapability 介面是 標記 介面,因為它可以代表 任何功能,而實際的實作將會與上下文依賴。 您也會觀察 ITestFrameworkCapability,其繼承自 ICapability 來分類功能。 功能系統的泛型本質允許依內容方便分組。 ITestFrameworkCapability測試架構中實作的所有功能分組。 ICapabilities<TCapability> 介面會顯示延伸模組所實作之所有功能的 。 同樣地,針對基礎,有一個名為 ITestFrameworkCapabilities的內容特定測試架構。 在 ITestFrameworkCapabilities 的過程中, 會被提供給平台。

若要建立解決上述案例的功能,您可以定義它,如下所示:

public interface IDisableParallelismCapability : ITestFrameworkCapability
{
    bool CanDisableParallelism { get; }
    bool CanProvidePerTestCpuConsumption { get; }
    void Enable();
}

如果測試架構實作了這個介面,那麼在執行期間,可以查詢以下內容:

  • 確認測試架構是否能夠關閉平行處理原則 CanDisableParallelism = true
  • 判斷測試架構是否可以提供 CPU 使用量數據 CanProvidePerTestCPUConsumption = true
  • 在測試會話開始之前叫用 Enable() 方法,要求測試配接器啟動此模式。

延伸模組內的假設代碼段可能類似:

IServiceProvider provider = null; // TODO: Get IServiceProvider.
var capabilities = serviceProvider.GetRequiredService<ITestFrameworkCapabilities>();

// Utilize the `GetCapability` API to search for the specific capability to query.
var capability = capabilities.GetCapability<IDisableParallelismCapability>();
if (capability is null)
{
    // Capability not supported...
}
else
{
    capability.Enable();
    if (capability.CanDisableParallelism)
    {
        // Do something...
    }

    if (capability.CanProvidePerTestCpuConsumption)
    {
        // Do something...
    }
}

上述範例說明能力基礎結構如何啟用強大的機制,以在測試會話中各元件之間傳達能力。 雖然範例示範專為測試架構設計的功能,但任何元件都可以公開並實作繼承自 ICapability的延伸模組。

很明顯,並非所有詳細數據都可以透過介面進行通訊。 考慮前一個範例,如果支援 CanProvidePerTestCpuConsumption,延伸模組應該預期什麼? 測試架構 IMessageBus 預期會傳送何種自定義資訊? 此解決方案是對這一功能的資料文件。 擁有者 負責設計、出貨並清楚記錄,協助想要有效 合作 的實作者,使用需要該特定功能的擴充功能。

例如,TRX 報表延伸模組可讓測試架構實作必要的功能,以正確產生 TRX 報表。 註冊所需的擴充功能包含在 https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport NuGet 套件中,而實作功能僅在 合約中,可透過https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions NuGet 套件找到。

最後,讓我們總結功能系統的主要層面:

  • 對於促進元件之間清楚且穩定的通訊而言,這是不可或缺的。
  • 所有功能都應該繼承自 ICapability 或繼承自它的介面,並且會透過具有 ICapabilities 介面的集合公開。
  • 它有助於特徵的演進,而不會造成重大變更。 如果不支援特定功能,可以採取適當的動作。
  • 設計、運送及記載功能使用的責任在於 功能擁有者。 Microsoft.Testing.Platform 也可以像任何其他擴充功能一樣 擁有 功能。

架構功能

平臺會公開名為 ITestFrameworkCapability 的特殊介面,這是針對測試架構公開之所有功能的基底。 向平臺註冊測試架構時,提供這些功能。

IBannerMessageOwnerCapability

選擇性 測試架構功能,可讓測試架構將橫幅訊息提供給平臺。 如果訊息 null 或功能不存在,則平臺會使用其預設橫幅訊息。

這項功能實作可讓您在決定是否應該顯示橫幅訊息時,將測試架構可能需要考慮的各種條件抽象化。

平臺會公開 IPlatformInformation 服務,提供有關建置自定義橫幅訊息時可能很有用之平臺的一些資訊。