Udostępnij za pośrednictwem


Microsoft.Testing.Platform możliwości

W kontekście microsoft.Testing.Platform funkcja odwołuje się do potencjalnego wykonania konkretnej akcji lub dostarczenia określonych informacji. Jest to środek dla frameworku testowego i rozszerzeń, aby zadeklarować swoją zdolność do działania w określony sposób lub udostępniania określonych informacji żądającym.

Żądający mogą być dowolnym składnikiem biorącym udział w sesji testowej, takim jak platforma, rozszerzenie lub framework testowy.

Głównym celem systemu możliwości jest ułatwienie efektywnej komunikacji między składnikami biorącymi udział w sesji testowej, umożliwiając im wymianę informacji i dokładne spełnienie ich odpowiednich potrzeb.

Przykład z przewodnikiem

Rozważmy hipotetyczny przykład, aby zademonstrować konieczność systemu możliwości.

Notatka

Ten przykład jest wyłącznie w celach ilustracyjnych i nie jest obecnie implementowany w witrynie Microsoft.Testing.Platform ani w żadnej strukturze testowania.

Wyobraź sobie sytuację, w której masz rozszerzenie, które wymaga platformy testowania do wykonania nie więcej niż jednego testu naraz. Ponadto po każdym teście rozszerzenie musi znać użycie procesora CPU dla tego konkretnego testu.

Aby uwzględnić powyższy scenariusz, należy zapytać się z platformy testowania, jeśli:

  1. Ma możliwość wykonywania tylko jednego testu jednocześnie.
  2. Może zapewniać informacje o ilości użycia CPU przez każdy test.

Jak rozszerzenie może określić, czy platforma testowania ma możliwość działania w tym trybie i udostępnić informacje o użyciu procesora CPU dla sesji testowej? W Microsoft.Testing.Platform ta zdolność jest reprezentowana przez implementację interfejsu 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
{
}

Jak widać, interfejs ICapability jest interfejsem markera, ponieważ może reprezentować dowolną możliwość, a rzeczywista implementacja będzie zależna od kontekstu. Zobaczysz również ITestFrameworkCapability, który dziedziczy z ICapability w celu sklasyfikowania możliwości. Ogólny charakter systemu możliwości umożliwia wygodne grupowanie według kontekstu. ITestFrameworkCapability grupuje wszystkie możliwości zaimplementowane przez platformę testowania . Interfejs ICapabilities<TCapability> ujawnia zestaw wszystkich funkcji implementowanych przez rozszerzenie. Podobnie w przypadku podstawowego istnieje struktura testowania specyficzna dla kontekstu o nazwie ITestFrameworkCapabilities. ITestFrameworkCapabilities jest dostarczana do platformy podczas procesu rejestracji platformy testowania.

Aby utworzyć możliwość, która dotyczy wyżej wymienionego scenariusza, zdefiniuj ją w następujący sposób:

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

Jeśli platforma testowania implementuje ten interfejs, w czasie wykonywania można wykonywać następujące zapytania:

  • Sprawdź, czy platforma testowania ma możliwość wyłączenia równoległości CanDisableParallelism = true.
  • Ustal, czy platforma testowania może dostarczyć dane użycia procesora CPU CanProvidePerTestCPUConsumption = true.
  • Zażądaj adaptera testowego, aby aktywować ten tryb, wywołując metodę Enable() przed rozpoczęciem sesji testowej.

Hipotetyczny fragment kodu wewnątrz rozszerzenia może wyglądać następująco:

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...
    }
}

W poprzednim przykładzie pokazano, w jaki sposób infrastruktura możliwości umożliwia zaawansowany mechanizm komunikacji między składnikami biorącymi udział w sesji testowej. Chociaż w przykładzie pokazano możliwość specjalnie zaprojektowaną dla frameworku testowego, każdy składnik może uwidaczniać i implementować rozszerzenia dziedziczone z ICapability.

Widać, że nie wszystkie szczegóły mogą być przekazywane za pośrednictwem interfejsu. Biorąc pod uwagę poprzedni przykład, jakiego rozszerzenia należy oczekiwać, jeśli CanProvidePerTestCpuConsumption jest obsługiwana? Jakiego rodzaju informacje niestandardowe mają być przesyłane za pośrednictwem IMessageBus przez platformę testowania? Rozwiązanie to dokumentacja zdolności. Jest to odpowiedzialność właściciela funkcjonalności , aby projektować, wdrażać i dokumentować ją jak najjaśniej, aby pomóc implementatorom chcącym skutecznie współpracować z rozszerzeniem, które wymaga tej konkretnej funkcjonalności.

Na przykład rozszerzenie raportu TRX umożliwia platformie testowania zaimplementowanie niezbędnej możliwości dokładnego wygenerowania raportu TRX. Rozszerzenie do rejestrowania jest zawarte w pakiecie NuGet https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport, ale możliwość implementacji znajduje się wyłącznie w pakiecie NuGet https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions.

Podsumowując, podsumujemy podstawowe aspekty systemu możliwości:

  • Niezbędne jest ułatwienie jasnej i stabilnej komunikacji między składnikami.
  • Wszystkie możliwości powinny dziedziczyć z ICapability lub interfejsu dziedziczonego po nim i są udostępniane za pośrednictwem kolekcji za pomocą interfejsu ICapabilities.
  • Ułatwia to ewolucję funkcji bez powodowania zmian powodujących niezgodność. Jeśli określona funkcja nie jest obsługiwana, można podjąć odpowiednie działania.
  • Na właścicielu możliwości spoczywa odpowiedzialność za projektowanie, wysyłkę i dokumentowanie użycia danej funkcji. Microsoft.Testing.Platform może również posiadać funkcjonalność w taki sam sposób, jak w przypadku każdego innego rozszerzenia.

Możliwości ram

Platforma uwidacznia wyspecjalizowany interfejs o nazwie ITestFrameworkCapability, który jest podstawą wszystkich możliwości udostępnianych dla platform testowych. Te możliwości są udostępniane podczas rejestrowania frameworku testowego na platformie.

IBannerMessageOwnerCapability

Opcjonalna zdolność struktury testowej, która umożliwia strukturze testowej dostarczanie wiadomości banerowej do platformy. Jeśli komunikat jest null lub jeśli funkcja nie jest obecna, platforma użyje domyślnego komunikatu baneru.

Ta implementacja możliwości pozwala na abstrahowanie różnych warunków, które framework testowy musi rozważyć podczas decydowania, czy komunikat banera powinien być wyświetlany.

Platforma udostępnia IPlatformInformation usługę, aby dostarczyć pewne informacje o platformie, które mogą być przydatne podczas tworzenia niestandardowego komunikatu baneru.