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
neboAssemblyLoadContext
, 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 run
naleznete 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 exec
viz 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 jsouTrace
,Debug
,Information
,Warning
,Error
neboCritical
.--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
,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
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
aVisual Studio Code
. - Automatické generování vstupního bodu ( metoda
Main
). - 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.