Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V kontextu platformy Microsoft.Testing.Platform odkazuje funkce na potenciál provedení konkrétní akce nebo poskytnutí konkrétních informací. Je to způsob, jak testovací architektura a rozšíření deklarovat jejich schopnostpracovat určitým způsobem nebo poskytovat konkrétní informace žadatelům .
žadatelé mohou být libovolnou komponentou zapojenou do testovací relace, jako je platforma, rozšíření nebo samotný testovací rámec.
Hlavním cílem systému schopností je usnadnit efektivní komunikaci mezi komponentami zapojenými do testovací relace, která jim umožní exchange informace a přesně splnit jejich potřeby.
Příklad s návodem
Představme si hypotetický příklad, který demonstruje nutnost systému schopností.
Poznámka
Tento příklad je čistě pro ilustrativní účely a aktuálně není implementován v rámci microsoft.Testing.Platform ani žádné testovací architektury.
Představte si situaci, kdy máte rozšíření, které vyžaduje, aby testovací architektura najednou nespustí více než jeden test. Kromě toho po každém testu musí rozšíření znát využití procesoru pro tento konkrétní test.
Pokud chcete vyhovět předchozímu scénáři, je potřeba se zeptat testovacího rámce, jestli:
- Má možnost provést najednou pouze jeden test.
- Může poskytnout informace týkající se množství procesoru spotřebovaného jednotlivými testy.
Jak může rozšíření určit, jestli testovací architektura má schopnost pracovat v tomto režimu a poskytovat informace o využití procesoru pro testovací relaci? V microsoft.Testing.Platform je tato funkce reprezentována implementací Microsoft.Testing.Platform.Capabilities.ICapability rozhraní:
// 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 vidíte, rozhraní ICapability je značkou rozhraní, protože může představovat jakékoli schopnostia skutečná implementace bude závislá na kontextu. Uvidíte také ITestFrameworkCapability, který dědí z ICapability ke klasifikaci schopností. Obecná povaha systému schopností umožňuje pohodlné seskupení podle kontextu.
ITestFrameworkCapability seskupí všechny možnosti implementované testovací architekturou. Rozhraní ICapabilities<TCapability> odhalí sadu všech funkcí implementovaných rozšířením. Podobně pro základ existuje kontextová testovací architektura s názvem ITestFrameworkCapabilities.
ITestFrameworkCapabilities se poskytuje platformě během procesu registrace testovacího frameworku.
Pokud chcete vytvořit funkci, která řeší výše uvedený scénář, definujete ji následujícím způsobem:
public interface IDisableParallelismCapability : ITestFrameworkCapability
{
bool CanDisableParallelism { get; }
bool CanProvidePerTestCpuConsumption { get; }
void Enable();
}
Pokud testovací architektura implementuje toto rozhraní za běhu, může být dotazováno následující:
- Ověřte, jestli testovací architektura má možnost vypnout paralelismus
CanDisableParallelism = true. - Zjistěte, jestli testovací architektura může poskytovat data o využití procesoru
CanProvidePerTestCPUConsumption = true. - Požádejte testovací adaptér o aktivaci tohoto režimu vyvoláním metody
Enable()před zahájením testovací relace.
Hypotetický fragment kódu uvnitř rozšíření by mohl vypadat přibližně takto:
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...
}
}
Předchozí příklad ukazuje, jak infrastruktura schopností umožňuje výkonný mechanismus pro komunikaci schopností mezi komponentami zapojenými do testovací relace. I když ukázka demonstruje schopnost speciálně navrženou pro testovací architekturu, každá komponenta může vystavit a implementovat rozšíření, která dědí z ICapability.
Je zřejmé, že ne všechny podrobnosti lze komunikovat prostřednictvím rozhraní. Vzhledem k předchozímu příkladu, co by mělo rozšíření očekávat, jestliže je podpora CanProvidePerTestCpuConsumption zahrnuta? Jaký druh vlastních informací se očekává, že se budou přenášet prostřednictvím testovací architektury IMessageBus? Řešením je dokumentace schopnosti pro. Je odpovědností za schopnost vlastníka navrhnout, odeslat a zdokumentovat co nejjasněji implementátory, kteří chtějí efektivně spolupracovat s rozšířením, které vyžaduje konkrétní schopnost.
Rozšíření TRX reportu například umožňuje testovacímu rámci implementovat nezbytnou schopnost k přesnému generování TRX reportu. Rozšíření pro registraci je zahrnuto v balíčku NuGet https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport, ale schopnost implementace je exkluzivně dostupná pouze v balíčku NuGet kontraktu https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions.
Na závěr si shrneme hlavní aspekty systému schopností:
- Je nezbytné usnadnit jasnou a stabilní komunikaci mezi součástmi.
- Všechny schopnosti by měly dědit z
ICapabilitynebo z rozhraní, které z něj dědí, a měly by být zpřístupněny prostřednictvím kolekce s rozhranímICapabilities. - Pomáhá při vývoji funkcí, aniž by způsobovala zásadní změny. Pokud určitá funkce není podporovaná, je možné provést příslušnou akci.
- Odpovědnost za návrh, expedici a dokumentaci použití funkce náleží vlastníku schopnosti . Microsoft.Testing.Platform může také vlastnit funkci stejným způsobem jako jakékoli jiné rozšíření.
Možnosti rámce
Platforma zveřejňuje specializované rozhraní s názvem ITestFrameworkCapability, které je základem všech funkcí vystavených pro testovací architektury. Tyto funkce jsou k dispozici při registraci testovacího frameworku na platformě.
IBannerMessageOwnerCapability
Volitelná schopnost testovací architektury, která umožňuje testovacímu rozhraní poskytnout bannerovou zprávu platformě. Pokud je zpráva null nebo pokud funkce není k dispozici, platforma použije výchozí bannerovou zprávu.
Tato implementace schopností umožňuje abstrahovat různé podmínky, které může testovací architektura zvážit při rozhodování, zda by se měla zobrazit bannerová zpráva nebo ne.
Platforma zpřístupňuje službu IPlatformInformation, aby poskytla některé informace o platformě, které by mohly být užitečné při vytváření vlastní bannerové zprávy.