Megosztás a következőn keresztül:


A Microsoft.Testing.Platform képességei

A Microsoft.Testing.Platform kontextusában a képesség egy adott művelet végrehajtásának vagy adott információk megadásának lehetőségére utal. A tesztelési keretrendszer és a bővítmények számára lehetővé teszi, hogy deklaráljákképességüket,bizonyos módon működjenek, vagy konkrét információkat adjanak a kérelmezőknek.

A kérelmezők lehetnek a tesztelési munkamenetben részt vevő bármely összetevő, például a platform, a bővítmény vagy maga a tesztelési keretrendszer.

A képességrendszer elsődleges célja, hogy megkönnyítse a hatékony kommunikációt a tesztelési munkamenetben részt vevő összetevők között, lehetővé téve számukra az információk exchange és az igényeik pontos kielégítését.

Irányított példa

Tekintsünk egy hipotetikus példát egy képességrendszer szükségességének szemléltetésére.

Jegyzet

Ez a példa kizárólag szemléltető célokra szolgál, és jelenleg nem implementálható a Microsoft.Testing.Platformon vagy bármely tesztelési keretrendszeren belül.

Képzeljen el egy olyan helyzetet, amelyben egy olyan bővítmény van, amely megköveteli, hogy a tesztelési keretrendszer egyszerre legfeljebb egy tesztet hajt végre. Ezenkívül az egyes tesztek után a bővítménynek ismernie kell az adott teszt processzorhasználatát.

Az előző forgatókönyvnek megfelelően a tesztelési keretrendszerből kell érdeklődnie, ha:

  1. Képes egyszerre csak egy tesztet végrehajtani.
  2. Információt nyújthat az egyes tesztek által felhasznált PROCESSZOR mennyiségéről.

Hogyan határozhatja meg a bővítmény, hogy a tesztelési keretrendszer képes-e ebben a módban működni, és hogy a tesztelési munkamenetek processzorhasználati adatait adja meg? A Microsoft.Testing.Platformban ezt a képességet a(z) Microsoft.Testing.Platform.Capabilities.ICapability interfész implementációja képviseli.

// 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
{
}

Mint látható, a ICapability felület egy jelölő felület, mert bármilyen képesség jelölhet, és a tényleges megvalósítás környezetfüggő lesz. Megfigyelheti a ITestFrameworkCapability-t, amely a ICapability-ből öröklődik a képesség besorolásához. A képességrendszer általános jellege lehetővé teszi a környezet szerinti csoportosítást. A ITestFrameworkCapability a tesztelési keretrendszeráltal implementált összes képességet csoportosítja. A ICapabilities<TCapability> felület megjeleníti a bővítmény által implementált összes képesség készletét. Az alaprendszerhez hasonlóan létezik egy ITestFrameworkCapabilitiesnevű környezetspecifikus tesztelési keretrendszer is. A ITestFrameworkCapabilities a tesztelési keretrendszer regisztrációs folyamat során biztosítják a platformnak.

Ha olyan képességet szeretne létrehozni, amely megfelel a fent említett forgatókönyvnek, az alábbiak szerint határozza meg:

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

Ha a tesztelési keretrendszer implementálja ezt az interfészt, futásidőben az alábbiak kérdezhetők le:

  • Ellenőrizze, hogy a tesztelési keretrendszer képes-e kikapcsolni a párhuzamosságot CanDisableParallelism = true.
  • Állapítsa meg, hogy a tesztelési keretrendszer képes-e processzorhasználati adatokat szolgáltatni CanProvidePerTestCPUConsumption = true.
  • Kérje meg a tesztadaptert, hogy aktiválja ezt a módot a Enable() metódus meghívásával a tesztelési munkamenet megkezdése előtt.

A bővítmény hipotetikus kódtöredéke a következőhöz hasonló lehet:

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

Az előző példa bemutatja, hogy a képességinfrastruktúra hogyan teszi lehetővé a képességek hatékony kommunikációjának mechanizmusát a tesztelési munkamenetben részt vevő összetevők között. Bár a minta egy kifejezetten a tesztelési keretrendszerhez tervezett képességet mutat be, bármely összetevő közzéteheti és implementálhatja a ICapabilityöröklő bővítményeket.

Nyilvánvaló, hogy nem minden részletet lehet kommunikálni egy felületen keresztül. Az előző példát figyelembe véve mire számíthat a bővítmény, ha a CanProvidePerTestCpuConsumption támogatott? Milyen típusú egyéni információkat kell továbbítani a tesztelési keretrendszer IMessageBus keresztül? A megoldás a képesség dokumentációja. A képesség tulajdonosának a felelőssége, hogy a lehető legnyilvánvalóbb módon tervezze meg, szállítsa és dokumentálja azt, hogy segítse azoknak az implementátoroknak a munkáját, akik hatékonyan szeretnének együttműködni a szükséges képességet igénylő bővítménnyel.

A TRX jelentésbővítmény például lehetővé teszi, hogy a tesztelési keretrendszer megvalósítsa a TRX-jelentések pontos létrehozásához szükséges képességet. A regisztrálandó bővítmény szerepel a https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport NuGet-csomagban, de a megvalósítás képessége csak a NuGet-csomag szerződésben található.

Összefoglalva összefoglaljuk a képességrendszer elsődleges szempontjait:

  • Elengedhetetlen az összetevők közötti egyértelmű és stabil kommunikáció megkönnyítéséhez.
  • Minden képességnek örökölnie kell ICapability-t vagy egy olyan interfészt, amely tőle öröklődik, és egy ICapabilities interfészen keresztüli gyűjteményben kell elérhetővé tenni.
  • Segít a funkciók továbbfejlesztésében anélkül, hogy jelentős változásokat okozna. Ha egy bizonyos képesség nem támogatott, megfelelő intézkedést lehet tenni.
  • A képesség használatának megtervezéséért, szállításáért és dokumentálásáért a képességtulajdonosa felelős. A Microsoft.Testing.Platform ugyanúgy rendelkezhet képességgel, mint bármely más bővítmény.

Keretrendszer képességei

A platform egy ITestFrameworkCapability nevű speciális felületet tesz elérhetővé, amely a tesztelési keretrendszerekhez elérhető összes képesség alapja. Ezek a képességek akkor érhetők el, ha regisztrálni a tesztelési keretrendszert a platform.

IBannerMessageOwnerCapability

Választható tesztelési keretrendszer képessége, amely lehetővé teszi, hogy a tesztelési keretrendszer a transzparens üzenetet küldje el a platformnak. Ha az üzenet null, vagy ha a képesség nem jelenik meg, a platform az alapértelmezett szalagcímüzenetet fogja használni.

Ez a képesség-implementáció lehetővé teszi, hogy elvonja a tesztelési keretrendszer által figyelembe veendő különböző feltételeket, amikor eldönti, hogy megjelenjen-e a szalagcím üzenete.

A platform elérhetővé teszi a IPlatformInformation szolgáltatást, hogy nyújtson néhány információt a platformról, amely hasznos lehet, amikor az egyéni szalagcímüzenetét hozza létre.