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
neboAssemblyLoadContext
a 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.dll
které 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 run
té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 exec
tématu dotnet exec.
Použití dotnet test
Microsoft.Testing.Platform
nabízí vrstvu kompatibility s vstest.console.exe
dotnet 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 jsouTrace
,Debug
Information
Warning
Error
nebo .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
,description
aoptions
. - Každý registrovaný nástroj, například
command
,name
,version
,description
a 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á
ProjectCapability
Visual Studio
průzkumníky testů aVisual 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.