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 žádné další závislosti aplikací, například vstest.console nebo dotnet test potřebné ke spuštění testů.

Microsoft.Testing.Platform je open source. Kód najdete Microsoft.Testing.Platform v úložišti Microsoft/testfx Na 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ž mezi rozhraním .NET Framework a .NET Core/.NET existuje vysoká úroveň kompatibility, některé klíčové funkce, jako je systém plug-in a nové možné faktory zformování kompilací .NET, zkompilovaly vývoj nebo plnou podporu nové funkce 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) vedlo ke stejnému výsledku. Nový modul runtime nespoléhá na reflexi ani na žádnou jinou funkci modulu runtime .NET ke koordinaci testovacího spuštění.

  • Průhlednost modulu runtime: Testovací modul runtime nezasahuje do kódu testovací architektury, nevytvoří izolované kontexty jako AppDomain nebo AssemblyLoadContexta nepoužívá reflexi 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ádro platformy je jedno sestavení .NET, Microsoft.Testing.Platform.dllkteré nemá žádné závislosti jiné než podporované moduly runtime.

  • Hostovatelné: Testovací modul runtime je možné hostovat v libovolné 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 faktorů formulářů .NET: Podpora aktuálních a budoucích faktorů formulářů .NET, včetně nativní AOT.

  • Výkon: Nalezení správné rovnováhy mezi funkcemi a body rozšíření, aby se zabránilo bloudí modulu runtime nevýkonný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 vytvořená na bodech rozšiřitelnosti, aby se umožnilo maximální přizpůsobení spouštění modulu runtime. 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 hostovatelnosti umožňuje model nasazení jednoho 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 MSTestu se podpora Microsoft.Testing.Platform provádí prostřednictvím msTest runneru.
  • NUnit. V NUnit, podpora Microsoft.Testing.Platform je provedena prostřednictvím NUnit runner.
  • xUnit.net: V xUnit.net se podpora Microsoft.Testing.Platform provádí prostřednictvím xUnit.net runneru.
  • TUnit: zcela postaven na Microsoft.Testing.Platform, pro více informací, viz TUnit dokumentace

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

Microsoft.Testing.Platform Projekty testů jsou vytvořené jako spustitelné soubory, které je možné spustit (nebo ladit) přímo. Neexistuje žádný další test spuštěné konzoly ani příkazu. Aplikace se ukončí s nenulovým ukončovacím kódem, pokud dojde k chybě, jak je typické u většiny spustitelných souborů. Další informace o známých ukončovacích kódech naleznete v microsoft.Testing.Platform ukončovací kódy.

Důležité

Ve výchozím nastavení Microsoft.Testing.Platform shromažďuje telemetrii. Další informace a možnosti odhlášení najdete v tématu Telemetrie Microsoft.Testing.Platform.

Publikování testovacího projektu pomocí dotnet publish a spuštění aplikace přímo je dalším způsobem, jak testy spustit. Například spuštění ../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 je možné zvážit hraniční případy, jako je nativní AOT.

Použití 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, že se testovací projekt v případě potřeby znovu sestaví. dotnet run automaticky vyhledá projekt také v aktuální složce.

dotnet run --project Contoso.MyTests

Další informace najdete v dotnet runtématu dotnet run.

Použití dotnet exec

K dotnet exec provedení (nebo spuštění) již vytvořeného testovacího projektu se používá příkaz nebo dotnet příkaz, což je 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

or

dotnet Contoso.MyTests.dll

Poznámka:

Zadání cesty ke spustitelnému souboru testovacího projektu (*.exe) způsobí chybu:

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 naleznete v dotnet exectématu dotnet exec.

Použití dotnet test

Microsoft.Testing.Platform nabízí vrstvu kompatibility s vstest.console.exedotnet test cílem zajistit, abyste mohli testy spouštět stejně jako předtím při povolování nového scénáře spuště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 tuto --help možnost.

  • @

    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í integrovaný protokolovací nástroj pro zápis protokolů synchronně. 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 "log_"je .

  • --diagnostic-verbosity

    Definuje úroveň podrobností při --diagnostic použití přepínače. Dostupné hodnoty jsou Trace, DebugInformationWarningErrornebo .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 ignorovat některé nenulové ukončovací kódy a místo toho je vrátit jako 0. Další informace najdete v tématu Ignorování konkrétních ukončovacích kódů.

  • --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 nástroj MSBuild:

  • Podpora pro dotnet test. Další informace naleznete v tématu dotnet test integrace.
  • Podpora vyžadovaná ProjectCapabilityVisual Studio průzkumníky testů a Visual Studio Code průzkumníky testů
  • Automatické generování vstupního bodu (Main metoda).
  • Automatické generování konfiguračního souboru.

Poznámka:

Tato integrace funguje tranzitivním způsobem (projekt odkazující na jiný projekt odkazující na tento balíček se bude chovat, jako by odkazoval na balíček) a lze jej zakázat prostřednictvím IsTestingPlatformApplication vlastnosti MSBuild.

Viz také