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.
Tento článek se vztahuje na: ✔️ .NET 6 SDK a novější verze
Název
dotnet test – Ovladač testu .NET použitý k provádění testů jednotek.
Popis
Příkaz dotnet test sestaví řešení a spustí testy pomocí VSTest nebo Microsoft Testing Platform (MTP). Pokud chcete povolit MTP, musíte v global.json souboru zadat test runner.
Tady je několik příkladů, jak v souboru určit spouštěč global.json testů:
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
{
"test": {
"runner": "VSTest"
}
}
Důležité
Prostředí dotnet test pro MTP je podporováno pouze ve Microsoft.Testing.Platform verzi 1.7 a novější.
Návod
Koncepční dokumentaci k dotnet testtématu Testování pomocí testu dotnet.
VSTest a Microsoft.Testing.Platform (MTP)
- dotnet test s VSTest
- dotnet test s MTP
Synopse
dotnet test [<PROJECT> | <SOLUTION> | <DIRECTORY> | <DLL> | <EXE>]
[--test-adapter-path <ADAPTER_PATH>]
[-a|--arch <ARCHITECTURE>]
[--artifacts-path <ARTIFACTS_DIR>]
[--blame]
[--blame-crash]
[--blame-crash-dump-type <DUMP_TYPE>]
[--blame-crash-collect-always]
[--blame-hang]
[--blame-hang-dump-type <DUMP_TYPE>]
[--blame-hang-timeout <TIMESPAN>]
[-c|--configuration <CONFIGURATION>]
[--collect <DATA_COLLECTOR_NAME>]
[-d|--diag <LOG_FILE>]
[--disable-build-servers]
[-f|--framework <FRAMEWORK>]
[-e|--environment <NAME="VALUE">]
[--filter <EXPRESSION>]
[--interactive]
[-l|--logger <LOGGER>]
[--no-build]
[--nologo]
[--no-restore]
[-o|--output <OUTPUT_DIRECTORY>]
[--os <OS>]
[--results-directory <RESULTS_DIR>]
[-r|--runtime <RUNTIME_IDENTIFIER>]
[-s|--settings <SETTINGS_FILE>]
[-t|--list-tests]
[--tl:[auto|on|off]]
[-v|--verbosity <LEVEL>]
[<args>...]
[[--] <RunSettings arguments>]
dotnet test -h|--help
Popis
Příkaz dotnet test se používá k provádění testů jednotek v daném řešení. Příkaz dotnet test sestaví řešení a spustí testovací hostitelskou aplikaci pro každý testovací projekt v řešení pomocí VSTest. Hostitel testu provádí testy v daném projektu pomocí testovací architektury, například MSTest, NUnit nebo xUnit a hlásí úspěch nebo selhání každého testu. Pokud jsou všechny testy úspěšné, vrátí spouštěč testů hodnotu 0 jako ukončovací kód; jinak pokud některý test selže, vrátí hodnotu 1.
Poznámka:
dotnet test byl původně navržen tak, aby podporoval pouze VSTestprojekty založené na testech. Nejnovější verze testovacích architektur přidávají podporu pro Microsoft.Testing.Platform. Tato alternativní testovací platforma je odlehčí a rychlejší než VSTest a podporuje dotnet test různé možnosti příkazového řádku. Další informace naleznete v tématu Microsoft.Testing.Platform.
U projektů s více cíli se testy spouští pro každou cílovou architekturu. Testovací hostitel a architektura testování jednotek jsou zabalené jako balíčky NuGet a jsou obnoveny jako běžné závislosti pro projekt. Počínaje sadou .NET 9 SDK se tyto testy spouští paralelně ve výchozím nastavení. Chcete-li zakázat paralelní provádění, nastavte TestTfmsInParallel vlastnost MSBuild na falsehodnotu . Další informace naleznete v tématu Paralelní spouštění testů a ukázkový příkazový řádek dále v tomto článku.
Projekty testů určují spouštěč testů pomocí běžného <PackageReference> prvku, jak je vidět v následujícím ukázkovém souboru projektu:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="xunit" Version="2.8.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.1" />
</ItemGroup>
</Project>
Kde Microsoft.NET.Test.Sdk je testovací hostitel, xunit je testovací architektura. A xunit.runner.visualstudio je to testovací adaptér, který umožňuje rozhraní xUnit pracovat s testovacím hostitelem.
Implicitní obnovení
Nemusíte spouštětdotnet restore, protože se spouští implicitně všemi příkazy, které vyžadují obnovení, například dotnet new, , dotnet build, dotnet run, dotnet testdotnet publisha dotnet pack. Pokud chcete zakázat implicitní obnovení, použijte tuto --no-restore možnost.
Příkaz dotnet restore je stále užitečný v určitých scénářích, kdy explicitní obnovení dává smysl, například sestavení kontinuální integrace ve službě Azure DevOps Services nebo v systémech sestavení, které potřebují explicitně řídit, kdy dojde k obnovení.
Informace o správě informačních kanálů NuGet najdete v dotnet restore dokumentaci.
Stažení manifestu úloh
Při spuštění tohoto příkazu zahájí asynchronní stahování reklamních manifestů pro úlohy. Pokud stahování po dokončení tohoto příkazu stále běží, stahování se zastaví. Další informace naleznete v tématu Reklamní manifesty.
Argumenty
PROJECT | SOLUTION | DIRECTORY | DLL | EXE- Cesta k testovacímu projektu
- Cesta k řešení
- Cesta k adresáři, který obsahuje projekt nebo řešení
- Cesta k testovacímu projektu .dll souboru
- Cesta k testovacímu projektu .exe souboru
Pokud není zadaný, efekt je stejný jako použití argumentu
DIRECTORYk určení aktuálního adresáře.
Možnosti
Upozorňující
Zásadní změny v možnostech:
- Počínaje rozhraním .NET 7: Přepněte
-ana alias--archmísto--test-adapter-path - Počínaje rozhraním .NET 7: Přepněte
-rna alias--runtimemísto--results-directory
Upozorňující
Při použití Microsoft.Testing.Platformnajdete informace o podporovaných možnostech v integraci testu dotnet. Obecně platí, že každá možnost nesouvisená s testováním se podporuje, i když každá možnost související s testováním není podporovaná tak, jak je.
--test-adapter-path <ADAPTER_PATH>Cesta k adresáři, který se má vyhledat pro další testovací adaptéry. Zkontrolují se pouze .dll soubory s příponou
.TestAdapter.dll. Pokud není zadaný, prohledá se adresář testovacího .dll .Krátký formulář
-adostupný ve verzích sady .NET SDK starších než 7-
-a|--arch <ARCHITECTURE>Určuje cílovou architekturu. Toto je zkratka pro nastavení identifikátoru runtime (RID), kde se zadaná hodnota zkombinuje s výchozím identifikátorem RID. Například na
win-x64počítači se zadáním--arch x86identifikátoru RID nastaví nawin-x86. Pokud použijete tuto možnost, tuto možnost nepoužívejte-r|--runtime. K dispozici od verze .NET 6 Preview 7. -
--artifacts-path <ARTIFACTS_DIR>Všechny výstupní soubory sestavení ze spuštěného příkazu budou v podsložkách pod zadanou cestou oddělenou projektem. Další informace naleznete v tématu Rozložení výstupu artefaktů. K dispozici od sady .NET 8 SDK.
--blameSpustí testy v režimu blame. Tato možnost je užitečná při izolování problematických testů, které způsobují chybové ukončení hostitele testu. Při zjištění chybového ukončení vytvoří sekvenční soubor, který
TestResults/<Guid>/<Guid>_Sequence.xmlzachycuje pořadí testů, které byly spuštěny před chybovým ukončením.Tato možnost nevytvoří výpis paměti a není užitečná při zablokování testu.
--blame-crash(K dispozici od sady .NET 5.0 SDK)Spustí testy v režimu blame a shromažďuje výpis stavu systému, když se hostitel testu neočekávaně ukončí. Tato možnost závisí na používané verzi rozhraní .NET, typu chyby a operačním systému.
Pro výjimky ve spravovaném kódu se automaticky shromažďuje výpis paměti v .NET 5.0 a novějších verzích. Vygeneruje výpis paměti pro testhost nebo jakýkoli podřízený proces, který také běžel na rozhraní .NET 5.0 a došlo k chybě. Chybové ukončení v nativním kódu nevygeneruje výpis paměti. Tato možnost funguje ve Windows, macOS a Linuxu.
Výpisy stavu systému v nativním kódu nebo při použití .NET Core 3.1 nebo starších verzí je možné shromažďovat pouze ve Windows pomocí nástroje Procdump. Adresář, který obsahuje procdump.exe a procdump64.exe , musí být v proměnné prostředí PATH nebo PROCDUMP_PATH. Stáhněte si nástroje. Implikuje
--blame.Pokud chcete shromáždit výpis stavu systému z nativní aplikace spuštěné v .NET 5.0 nebo novější, může být použití nástroje Procdump vynuceno nastavením
VSTEST_DUMP_FORCEPROCDUMPproměnné prostředí na1hodnotu .--blame-crash-dump-type <DUMP_TYPE>(K dispozici od sady .NET 5.0 SDK)Typ výpisu stavu systému, který se má shromáždit. Podporované typy výpisu paměti jsou
full(výchozí) amini. Implikuje--blame-crash.--blame-crash-collect-always(K dispozici od sady .NET 5.0 SDK)Shromažďuje výpis stavu systému podle očekávání a také neočekávaný ukončení hostitele testu.
--blame-hang(K dispozici od sady .NET 5.0 SDK)Spusťte testy v režimu blame a shromáždí výpis stavu, když test překročí daný časový limit.
--blame-hang-dump-type <DUMP_TYPE>(K dispozici od sady .NET 5.0 SDK)Typ výpisu stavu systému, který se má shromáždit. Mělo by to být
full,mininebonone. Pononezadání se testovací hostitel ukončí při vypršení časového limitu, ale neshromáždí se žádný výpis. Implikuje--blame-hang.--blame-hang-timeout <TIMESPAN>(K dispozici od sady .NET 5.0 SDK)Časový limit pro jednotlivé testy, po kterém se aktivuje výpis stavu systému, a proces hostitele testu a všechny jeho podřízené procesy se vypsají a ukončí. Hodnota časového limitu je zadána v jednom z následujících formátů:
- 1.5h, 1.5hour, 1.5hours
- 90m, 90min, 90minute, 90minutes
- 5400s, 5400sec, 5400second, 5400seconds
- 5400000ms, 540000000mil, 54000000 milisekund, 54000000 milisekund
Pokud se nepoužívá žádná jednotka (například 54000000), předpokládá se, že hodnota je v milisekundách. Při použití společně s testy řízenými daty závisí chování časového limitu na použitém testovacím adaptéru. Pro xUnit, NUnit. a MSTest 2.2.4+, časový limit se obnoví po každém testovacím případu. Pro MSTest před verzí 2.2.4 se časový limit použije pro všechny testovací případy. Tato možnost je podporována ve Windows s a novějším
netcoreapp2.1, v Linuxu s a novějšímnetcoreapp3.1a v macOS s nebo novějšímnet5.0. Implikuje--blamea--blame-hang.-
-c|--configuration <CONFIGURATION>Definuje konfiguraci sestavení. Výchozí hodnota pro většinu projektů je
Debug, ale můžete přepsat nastavení konfigurace sestavení v projektu. --collect <DATA_COLLECTOR_NAME>Povolí kolektor dat pro testovací běh. Další informace najdete v tématu Monitorování a analýza testovacího spuštění.
Pomocí této možnosti můžete například shromažďovat pokrytí
--collect "Code Coverage"kódu. Další informace najdete v tématu Použití pokrytí kódu, přizpůsobení analýzy pokrytí kódu a problému GitHubu dotnet/docs#34479.Ke shromažďování pokrytí kódu můžete také použít Coverlet pomocí této
--collect "XPlat Code Coverage"možnosti.-d|--diag <LOG_FILE>Povolí diagnostický režim pro testovací platformu a zapisuje diagnostické zprávy do zadaného souboru a do souborů vedle ní. Proces, který protokoluje zprávy, určuje, které soubory se vytvoří, například
*.host_<date>.txtpro protokol testovacího hostitele a*.datacollector_<date>.txtpro protokol kolektoru dat.-
--disable-build-serversVynutí příkaz ignorovat všechny trvalé buildové servery. Tato možnost poskytuje konzistentní způsob, jak zakázat veškeré použití ukládání sestavení do mezipaměti, což vynutí sestavení úplně od začátku. Sestavení, které nespoléhá na mezipaměti, je užitečné, když jsou mezipaměti z nějakého důvodu poškozené nebo nesprávné. K dispozici od sady .NET 7 SDK.
-e|--environment <NAME="VALUE">Nastaví hodnotu proměnné prostředí. Vytvoří proměnnou, pokud neexistuje, přepíše, pokud existuje. Použití této možnosti vynutí spuštění testů v izolovaném procesu. Tuto možnost lze zadat vícekrát, aby bylo možné zadat více proměnných.
-f|--framework <FRAMEWORK>Moniker cílové architektury (TFM) cílové architektury ke spuštění testů. V souboru projektu musí být zadána také cílová architektura.
--filter <EXPRESSION>Filtruje testy v aktuálním projektu pomocí daného výrazu. Spustí se pouze testy, které odpovídají výrazu filtru. Další informace najdete v části Podrobnosti o možnostech filtru. Další informace a příklady použití filtrování selektivních testů jednotek naleznete v tématu Spouštění selektivních testů jednotek.
-
-?|-h|--helpVytiskne popis použití příkazu.
-
--interactiveUmožňuje příkazu zastavit a čekat na uživatelský vstup nebo akci. Například k dokončení ověřování.
-l|--logger <LOGGER>Určuje protokolovací nástroj pro výsledky testů a volitelně přepne protokolovací nástroj. Pokud chcete povolit více protokolovacích souborů, zadejte tento parametr vícekrát. Další informace najdete v tématu Vytváření sestav výsledků testů, přepínačů pro protokolovací nástroje a příklady dále v tomto článku.
Aby bylo možné předávat přepínače příkazového řádku do protokolovacího nástroje:
- Použijte úplný název přepínače, nikoli zkrácený tvar (například
verbositymístov). - Vynecháte všechny úvodní pomlčky.
- Nahraďte mezeru oddělující každý přepínač středníkem
;. - Pokud má přepínač hodnotu, nahraďte oddělovač dvojtečky mezi tímto přepínačem a jeho hodnotou symbolem
=rovná se .
Například
-v:detailed --consoleLoggerParameters:ErrorsOnlyby se stalverbosity=detailed;consoleLoggerParameters=ErrorsOnly.- Použijte úplný název přepínače, nikoli zkrácený tvar (například
--no-buildPřed spuštěním testovacího projektu se nevystaví. Příznak také implicitně nastaví
--no-restore.--nologoSpouštění testů bez zobrazení banneru Microsoft TestPlatform K dispozici od sady .NET Core 3.0 SDK.
--no-restorePři spuštění příkazu nespustí implicitní obnovení.
-o|--output <OUTPUT_DIRECTORY>Adresář, ve kterém najdete binární soubory, které se mají spustit. Pokud není zadána, výchozí cesta je
./bin/<configuration>/<framework>/. U projektů s více cílovými architekturami (prostřednictvímTargetFrameworksvlastnosti) musíte také definovat--framework, kdy tuto možnost zadáte.dotnet testvždy spouští testy z výstupního adresáře. Můžete použít AppDomain.BaseDirectory ke využívání testovacích prostředků ve výstupním adresáři.Sada .NET 7.0.200 SDK a novější
Pokud při spuštění tohoto příkazu v řešení zadáte
--outputmožnost, rozhraní příkazového řádku vygeneruje upozornění (chyba ve verzi 7.0.200) kvůli nejasné sémantice výstupní cesty. Možnost--outputje zakázána, protože všechny výstupy všech sestavených projektů by se zkopírovaly do zadaného adresáře, který není kompatibilní s více cílenými projekty a projekty, které mají různé verze přímých a tranzitivních závislostí. Další informace najdete v tématu Možnost na úrovni--outputřešení již neplatí pro příkazy související s sestavením.
-
--os <OS>Určuje cílový operační systém (OS). Toto je zkratka pro nastavení identifikátoru runtime (RID), kde se zadaná hodnota zkombinuje s výchozím identifikátorem RID. Například na
win-x64počítači se zadáním--os linuxidentifikátoru RID nastaví nalinux-x64. Pokud použijete tuto možnost, tuto možnost nepoužívejte-r|--runtime. K dispozici od .NET 6. --results-directory <RESULTS_DIR>Adresář, do kterého se umístí výsledky testu. Pokud zadaný adresář neexistuje, vytvoří se. Výchozí hodnota je
TestResultsv adresáři, který obsahuje soubor projektu.Krátký formulář
-rdostupný ve verzích sady .NET SDK starších než 7-r|--runtime <RUNTIME_IDENTIFIER>Cílový modul runtime, pro který se má testovat.
Krátký formulář
-rdostupný od sady .NET SDK 7.-s|--settings <SETTINGS_FILE>Soubor
.runsettings, který se má použít ke spuštění testů. PrvekTargetPlatform(x86|x64) nemá žádný vliv nadotnet test. Pokud chcete spustit testy, které cílí na x86, nainstalujte verzi .NET Core x86. Bitová verze dotnet.exe , která je na cestě, je to, co se použije ke spouštění testů. Další informace naleznete v následujících zdrojích:-t|--list-testsVypíše zjištěné testy místo spuštění testů.
-
--tl:[auto|on|off]Určuje, jestli se má pro výstup sestavení použít terminálový protokolovací nástroj . Výchozí hodnota je
auto, která nejprve ověří prostředí před povolením protokolování terminálu. Prostředí ověřuje, že terminál dokáže používat moderní výstupní funkce a nepoužívá přesměrovaný standardní výstup, než povolí nový protokolovací modul.onpřeskočí kontrolu prostředí a povolí protokolování terminálu.offpřeskočí kontrolu prostředí a použije výchozí protokolovací nástroj konzoly.Terminal Logger ukazuje fázi obnovení následovanou fází sestavení. Během každé fáze se aktuálně stavební projekty zobrazují v dolní části terminálu. Každý projekt, který vytváří výstupy cíle NÁSTROJE MSBuild, který se právě sestavuje, i dobu strávenou na daném cíli. Další informace o sestavení najdete v těchto informacích. Po dokončení sestavení projektu se zapíše jeden oddíl "sestavení dokončeno", který zachycuje:
- Název sestaveného projektu.
- Cílová architektura (pokud je cílená na více cílů).
- Stav tohoto sestavení.
- Primární výstup tohoto sestavení (který je hypertextový odkaz).
- Všechna diagnostika vygenerovaná pro tento projekt.
Tato možnost je dostupná od verze .NET 8.
-
-v|--verbosity <LEVEL>Nastaví úroveň podrobností příkazu. Povolené hodnoty jsou
q[uiet], ,m[inimal]n[ormal],d[etailed]adiag[nostic]. Výchozí hodnota jeminimal. Další informace najdete na webu LoggerVerbosity. argsUrčuje další argumenty pro předání adaptéru. K oddělení více argumentů použijte mezeru.
Seznam možných argumentů závisí na zadaném chování:
- Když zadáte projekt, řešení nebo adresář nebo pokud tento argument vynecháte, volání se přesměruje na
msbuild. V takovém případě se dostupné argumenty nacházejí v dokumentaci k nástroji msbuild dotnet. - Když zadáte .dll nebo .exe, hovor se přesměruje na
vstest. V takovém případě najdete dostupné argumenty v dokumentaci k dotnet vstest.
- Když zadáte projekt, řešení nebo adresář nebo pokud tento argument vynecháte, volání se přesměruje na
RunSettingsargumenty
Vložený RunSettings řádek se předá jako poslední argumenty na příkazovém řádku za "--" (všimněte si mezery za --).
RunSettings Vložené jsou zadány jako [name]=[value] páry. Mezera se používá k oddělení více [name]=[value] dvojic.
Příklad: dotnet test -- MSTest.DeploymentEnabled=false MSTest.MapInconclusiveToFailed=True
Další informace naleznete v tématu Předávání argumentů RunSettings prostřednictvím příkazového řádku.
Příklady
Spusťte testy v projektu v aktuálním adresáři:
dotnet testSpusťte testy v
test1projektu:dotnet test ~/projects/test1/test1.csprojSpusťte testy pomocí
test1.dllsestavení:dotnet test ~/projects/test1/bin/debug/test1.dllSpusťte testy v projektu v aktuálním adresáři a vygenerujte soubor výsledků testů ve formátu trx:
dotnet test --logger trxSpusťte testy v projektu v aktuálním adresáři a vygenerujte soubor pokrytí kódu pomocí Pokrytí kódu microsoftu:
dotnet test --collect "Code Coverage"Spusťte testy v projektu v aktuálním adresáři a vygenerujte soubor pokrytí kódu pomocí
Coverlet (po instalaci integrace kolektorů Coverlet u):dotnet test --collect:"XPlat Code Coverage"Spusťte testy v projektu v aktuálním adresáři a protokolujte s podrobnými podrobnostmi do konzoly:
dotnet test --logger "console;verbosity=detailed"Spusťte testy v projektu v aktuálním adresáři a protokolujte pomocí protokolovacího nástroje trx do testResults.trx ve složce TestResults :
dotnet test --logger "trx;logfilename=testResults.trx"Vzhledem k tomu, že je zadaný název souboru protokolu, použije se stejný název pro každou cílovou architekturu v případě projektu s více cíli. Výstup pro každou cílovou architekturu přepíše výstup pro předchozí cílové architektury. Soubor se vytvoří ve složce TestResults ve složce testovacího projektu, protože relativní cesty jsou relativní vzhledem k této složce. Následující příklad ukazuje, jak vytvořit samostatný soubor pro každou cílovou architekturu.
Spusťte testy v projektu v aktuálním adresáři a protokolujte pomocí nástroje trx logger do souborů ve složce TestResults s názvy souborů, které jsou jedinečné pro každou cílovou architekturu:
dotnet test --logger:"trx;LogFilePrefix=testResults"Spusťte testy v projektu v aktuálním adresáři a protokolujte protokolovacím nástrojem html, který testResults.html ve složce TestResults :
dotnet test --logger "html;logfilename=testResults.html"Spusťte testy v projektu v aktuálním adresáři a nahlašte probíhající testy, když došlo k chybovému ukončení hostitele testu:
dotnet test --blameSpusťte testy v
test1projektu a zadejte-blargument (binární protokol) namsbuild:dotnet test ~/projects/test1/test1.csproj -blSpusťte testy v
test1projektu a nastavte vlastnost MSBuildDefineConstantsnaDEV:dotnet test ~/projects/test1/test1.csproj -p:DefineConstants="DEV"Spusťte testy v
test1projektu a nastavte vlastnost MSBuildTestTfmsInParallelnafalse:dotnet test ~/projects/test1/test1.csproj -p:TestTfmsInParallel=false
Podrobnosti o možnostech filtrování
--filter <EXPRESSION>
<Expression> má formát <property><operator><value>[|&<Expression>].
<property> je atributem Test Case. Níže jsou uvedené vlastnosti podporované oblíbenými architekturami testování částí:
| Testovací architektura | Podporované vlastnosti |
|---|---|
| MSTest |
|
| xUnit |
|
| NUnit |
|
Popisuje <operator> vztah mezi vlastností a hodnotou:
| Operátor | Funkce |
|---|---|
= |
Přesná shoda |
!= |
Ne přesná shoda |
~ |
Obsahuje |
!~ |
Neobsahuje |
<value> je řetězec. Všechna vyhledávání nerozlišují malá a velká písmena.
Výraz bez vlastnosti <operator> se automaticky považuje za containsFullyQualifiedName vlastnost (například dotnet test --filter xyz je stejný jako dotnet test --filter FullyQualifiedName~xyz).
Výrazy lze spojit s podmíněnými operátory:
| Operátor | Funkce |
|---|---|
| |
NEBO |
& |
A |
Výrazy můžete uzavřít do závorek při použití podmíněných operátorů (například (Name~TestMethod1) | (Name~TestMethod2)).
Další informace a příklady použití filtrování selektivních testů jednotek naleznete v tématu Spouštění selektivních testů jednotek.