Sdílet prostřednictvím


Microsoft.Testing.Platform – přehled

Microsoft.Testing.Platform je jednoduchá a přenosná alternativa k VSTest pro spouštění testů ve všech kontextech, včetně kanálů kontinuální integrace (CI), rozhraní příkazového řádku, Průzkumníka testů sady Visual Studio a Průzkumníka textu VS Code. Microsoft.Testing.Platform je vložený přímo do vašich testovacích projektů a nejsou potřebné žádné další závislosti aplikací, jako například vstest.console nebo dotnet test, pro spuštění vašich testů.

Microsoft.Testing.Platform je open source. Kód Microsoft.Testing.Platform najdete v úložišti microsoft/testfx GitHubu.

Pilíře Microsoft.Testing.Platform

Tato nová testovací platforma je založená na prostředí týmu .NET Developer Experience Testing a zaměřuje se na řešení problémů, ke kterým došlo od vydání .NET Core v roce 2016. I když existuje vysoká úroveň kompatibility mezi rozhraním .NET Framework a .NET Core/.NET, některé klíčové funkce, jako je systém pluginů a nové možné formáty kompilací .NET, ztížily rozvoj nebo plnou podporu nové vlastnosti modulu runtime s aktuální architekturou platformy VSTest .

Hlavní hlavní faktory pro vývoj nové testovací platformy jsou podrobně popsány v následujících příkladech:

  • determinismus: Zajištění, aby spuštění stejných testů v různých kontextech (místní, CI) vytvořilo stejný výsledek. Nové běhové prostředí nespoléhá na reflexi ani na žádnou jinou funkci běhového prostředí .NET ke koordinaci testového spuštění.

  • Transparentnost běhu: Testovací běh neinterferuje s kódem testovací architektury, nevytváří izolované kontexty jako AppDomain nebo AssemblyLoadContext, a nepoužívá reflekci ani vlastní překladače sestavení.

  • Registrace rozšíření v době kompilace: Rozšíření, jako jsou testovací architektury a rozšíření mimo proces, se registrují během kompilace, aby se zajistila determinismus a usnadnila detekce nekonzistence.

  • Nulové závislosti: Jádrem platformy je jedno sestavení .NET, Microsoft.Testing.Platform.dll, které nemá jiné závislosti než podporované prostředí runtime.

  • Hostovatelný: Modul runtime lze hostovat v jakékoli aplikaci .NET. Zatímco konzolová aplikace se běžně používá ke spouštění testů, můžete vytvořit testovací aplikaci v libovolném typu aplikace .NET. To vám umožní spouštět testy v rámci speciálních kontextů, jako jsou zařízení nebo prohlížeče, kde můžou existovat omezení.

  • Podpora všech platforem .NET: Podpora aktuálních a budoucích platforem .NET, včetně Native AOT.

  • výkonné: Nalezení správné rovnováhy mezi funkcemi a body rozšíření, aby nedocházelo k bloudení modulu runtime s jiným než základním kódem. Nová testovací platforma je navržená k "orchestraci" testovacího běhu, a nikoli k poskytování podrobností implementace, jak to udělat.

  • Dostatečně rozšiřitelný: Nová platforma je postavena na bodech rozšiřitelnosti, což umožňuje maximální přizpůsobení běhu času. Umožňuje nakonfigurovat hostitele testovacího procesu, sledovat proces testování a využívat informace z testovací architektury v rámci procesu testovacího hostitele.

  • nasazení jednoho modulu: Funkce hostability umožňuje jeden model nasazení modulu, kde lze použít jeden výsledek kompilace k podpoře všech bodů rozšiřitelnosti, a to jak mimo proces, tak i bez nutnosti dodávat různé spustitelné moduly.

Podporované testovací architektury

  • MSTest. V MSTest je podpora Microsoft.Testing.Platform zajištěna prostřednictvím MSTest runneru.
  • NUnit. V rámci NUnit se podpora Microsoft.Testing.Platform provádí prostřednictvím spouštěče NUnit.
  • xUnit.net: V xUnit.net se podpora Microsoft.Testing.Platform provádí prostřednictvím spouštěčem xUnit.net.
  • TUnit: zcela postaven na Microsoft.Testing.Platform, další informace naleznete v dokumentaci TUnit.

Spouštění a ladění testů

Microsoft.Testing.Platform testovací projekty jsou vytvořené jako spustitelné soubory, které je možné spouštět (nebo ladit) přímo. Neexistuje žádná další konzole ani příkaz pro spuštění testu. Aplikace se ukončí nenulovým ukončovacím kódem, pokud dojde k chybě, která je typická pro většinu spustitelných souborů. Další informace o známých ukončovacích kódech naleznete viz Microsoft.Testing.Platform ukončovací kódy.

Spropitné

Konkrétní ukončovací kód můžete ignorovat pomocí možnosti příkazového řádku --ignore-exit-code.

Pomocí vlastnosti TestingPlatformCommandLineArguments MSBuild můžete také nastavit možnosti příkazového řádku, které platí pro konkrétní testovací projekt v souboru projektu. Jedním z běžných případů použití je pro testovací projekty, ve kterých jsou všechny testy ignorovány, které se obvykle ukončují s ukončovacím kódem 8 (v testovací relaci neproběhly žádné testy). V tomto scénáři můžete do souboru projektu přidat následující pod sekci označenou PropertyGroup.

<TestingPlatformCommandLineArguments>$(TestingPlatformCommandLineArguments) --ignore-exit-code 8</TestingPlatformCommandLineArguments>

Důležitý

Ve výchozím nastavení Microsoft.Testing.Platform shromažďuje telemetrii. Další informace a možnosti odhlášení viz kapitolu Microsoft.Testing.Platformtelemetrie.

Publikování testovacího projektu pomocí dotnet publish a spuštění aplikace přímo představuje jiný způsob, jak testy spustit. Například spuštění příkazu ./Contoso.MyTests.exe. V některých scénářích je také možné použít dotnet build k vytvoření spustitelného souboru, ale existují hraniční případy ke zvážení, jako je Native AOT.

Použijte dotnet run

Příkaz dotnet run lze použít k sestavení a spuštění testovacího projektu. To je nejjednodušší, i když někdy nejpomalejší způsob, jak spustit testy. Použití dotnet run je praktické, když upravujete a spouštíte testy místně, protože zajišťuje, aby se projekt testů v případě potřeby znovu sestavil. dotnet run také automaticky najde projekt v aktuální složce.

dotnet run --project Contoso.MyTests

Další informace o dotnet runnaleznete v tématu dotnet run.

Použij dotnet exec

Příkaz dotnet exec nebo dotnet slouží ke spuštění (nebo spuštění) již vytvořeného testovacího projektu, je to alternativa k přímému spuštění aplikace. dotnet exec vyžaduje cestu k sestavené knihovně DLL testovacího projektu.

dotnet exec Contoso.MyTests.dll

nebo

dotnet Contoso.MyTests.dll

Poznámka

Při zadání cesty ke spustitelnému souboru testovacího projektu (*.exe) dojde k chybě:

Error:
  An assembly specified in the application dependencies manifest
  (Contoso.MyTests.deps.json) has already been found but with a different
  file extension:
    package: 'Contoso.MyTests', version: '1.0.0'
    path: 'Contoso.MyTests.dll'
    previously found assembly: 'S:\t\Contoso.MyTests\bin\Debug\net8.0\Contoso.MyTests.exe'

Další informace o dotnet execviz dotnet exec.

Použití dotnet test

Microsoft.Testing.Platform nabízí vrstvu kompatibility s vstest.console.exe a dotnet test, která zajišťuje, že testy můžete spouštět stejně jako předtím při povolování nového scénáře provádění.

dotnet test Contoso.MyTests.dll

Možnosti

Následující seznam popisuje pouze možnosti platformy. Pokud chcete zobrazit konkrétní možnosti, které jednotlivá rozšíření přináší, podívejte se na stránku dokumentace k rozšíření nebo použijte možnost --help.

  • @

    Určuje název souboru odpovědi. Název souboru odpovědi musí okamžitě následovat za znakem @ bez mezer mezi znakem @ a názvem souboru odpovědi.

    Možnosti v souboru odpovědi se interpretují tak, jako kdyby byly na daném místě na příkazovém řádku. Každý argument v souboru odpovědi musí začínat a končit na stejném řádku. Zpětné lomítko () nelze použít ke zřetězení řádků. Použití souboru odpovědi pomáhá pro velmi dlouhé příkazy, které by mohly překročit limity terminálu. Soubor odpovědi můžete kombinovat s vloženými argumenty příkazového řádku. Například:

    ./TestExecutable.exe @"filter.rsp" --timeout 10s
    

    kde filter.rsp může mít následující obsah:

    --filter "A very long filter"
    

    Nebo jeden soubor rsp lze použít k určení časového limitu i filtru následujícím způsobem:

    ./TestExecutable.exe @"arguments.rsp"
    
    --filter "A very long filter"
    --timeout 10s
    
  • --config-file

    Určuje soubor testconfig.json.

  • --diagnostic

    Povolí protokolování diagnostiky. Výchozí úroveň protokolu je Trace. Soubor je zapsán ve výstupním adresáři s následujícím formátem názvu, log_[MMddHHssfff].diag.

  • --diagnostic-filelogger-synchronouswrite

    Vynutí vestavěný nástroj pro záznam do souboru pro synchronní zápis záznamů. Užitečné ve scénářích, kdy nechcete ztratit žádné položky protokolu (pokud se proces chybově ukončí). Tím se zpomalí spuštění testu.

  • --diagnostic-output-directory

    Výstupní adresář protokolování diagnostiky, pokud není zadaný, soubor se vygeneruje ve výchozím adresáři TestResults.

  • --diagnostic-output-fileprefix

    Předpona názvu souboru protokolu. Výchozí hodnota je "log_".

  • --diagnostic-verbosity

    Definuje úroveň podrobností při použití přepínače --diagnostic. Dostupné hodnoty jsou Trace, Debug, Information, Warning, Errornebo Critical.

  • --exit-on-process-exit

    Ukončete testovací proces, pokud se ukončí závislý proces. Je nutné zadat PID.

  • --help

    Vytiskne popis použití příkazu.

  • -ignore-exit-code

    Umožňuje, aby některé nenulové ukončovací kódy byly ignorovány a místo toho se vrátí jako 0. Další informace naleznete v tématu Ignorovat konkrétní ukončovací kódy.

  • --info

    Zobrazí rozšířené informace o testovací aplikaci .NET, například:

    • Platforma.
    • Prostředí.
    • Každý zaregistrovaný poskytovatel příkazového řádku, například name, version, descriptiona options.
    • Každý registrovaný nástroj, například command, name, version, descriptiona všechny poskytovatele příkazového řádku.

    Tato funkce slouží k pochopení rozšíření, která by registrovala stejnou možnost příkazového řádku nebo změny dostupných možností mezi několika verzemi rozšíření (nebo platformou).

  • --list-tests

    Zobrazí seznam dostupných testů. Testy nebudou provedeny.

  • --maximum-failed-tests

    Určuje maximální počet selhání testů, které po dosažení zastaví testovací běh. Podpora tohoto přepínače vyžaduje, aby autoři architektury implementovali funkci IGracefulStopTestExecutionCapability. Ukončovací kód při dosažení tohoto počtu neúspěšných testů je 13. Další informace naleznete v tématu Kódy ukončení Microsoft.Testing.Platform.

    Poznámka

    Tato funkce je dostupná na platformě Microsoft.Testing.Platform od verze 1.5.

  • --minimum-expected-tests

    Určuje minimální počet testů, které se mají spustit. Ve výchozím nastavení se očekává, že se spustí aspoň jeden test.

  • --results-directory

    Adresář, do kterého se umístí výsledky testu. Pokud zadaný adresář neexistuje, vytvoří se. Výchozí hodnota je TestResults v adresáři, který obsahuje testovací aplikaci.

  • --timeout

    Časový limit spuštění globálního testu. Vezme jeden argument jako řetězec ve formátu <value>[h|m|s], kde <value> je plovoucí.

Integrace nástroje MSBuild

Balíček NuGet Microsoft.Testing.Platform.MSBuild poskytuje různé integrace pro Microsoft.Testing.Platform s nástrojem MSBuild:

  • Podpora pro dotnet test. Další informace naleznete v části integrace testu dotnet.
  • Podpora pro ProjectCapability požadovaná průzkumníky testů Visual Studio a Visual Studio Code.
  • Automatické generování vstupního bodu ( metodaMain).
  • Automatické generování konfiguračního souboru.

Poznámka

Tato integrace funguje tranzitivním způsobem (projekt, který odkazuje na jiný projekt odkazující na tento balíček, bude se chovat tak, jako by odkazoval na balíček) a může být zakázán prostřednictvím IsTestingPlatformApplication VLASTNOSTI MSBuild.

Viz také