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 obsahuje pokyny k řešení potíží pro MTP.
Ukončovací kódy
MTP používá známé ukončovací kódy ke komunikaci o selhání testu nebo chybách aplikace. Ukončovací kódy začínají 0 a nejsou záporné.
| Ukončovací kód | Podrobnosti |
|---|---|
0 |
Ukončovací 0 kód označuje úspěch. Všechny testy, které byly vybrány ke spuštění, proběhly až do konce, aniž by došlo k chybám. |
1 |
Ukončovací 1 kód označuje neznámé chyby a funguje jako catch all. Další informace o chybě a podrobnosti najdete ve výstupu. |
2 |
Ukončovací 2 kód se používá k označení, že došlo aspoň k jednomu selhání testu. |
3 |
Ukončovací kód 3 označuje, že testovací relace byla přerušena. Relaci je možné přerušit pomocí ctrl+C jako příklad. |
4 |
Ukončovací kód 4 označuje, že nastavení použitých rozšíření je neplatné a relace testů se nedá spustit. |
5 |
Ukončovací kód 5 označuje, že argumenty příkazového řádku předané testovací aplikaci byly neplatné. |
6 (už se nepoužívá) |
Ukončovací kód 6 již není vytvořen platformou; dříve uvedl, že testovací relace používala neimplementovanou funkci. |
7 |
Ukončovací kód 7 označuje, že testovací relace se nepodařilo úspěšně dokončit a pravděpodobně došlo k chybovému ukončení. Je možné, že příčinou byla testovací relace, která byla spuštěna prostřednictvím bodu rozšíření testovacího kontroleru. |
8 |
Ukončovací kód 8 znamená, že testovací relace nenašla žádné testy nebo že každý vybraný test byl v přísném režimu --zero-tests-policy přeskočen. |
9 |
Ukončovací kód 9 označuje, že spuštění spustilo méně testů, než vyžaduje explicitní --minimum-expected-tests hodnota, včetně nulových testů. |
10 |
Ukončovací kód 10 označuje, že testovací adaptér, Test.Platform Test Framework, MSTest, NUnit nebo xUnit se nepodařilo spustit testy z důvodu infrastruktury nesouvisející s vlastním testem. Příkladem je neschopnost vytvořit přípravek potřebný pro testy. |
11 |
Ukončovací kód 11 označuje, že testovací proces se ukončí, pokud se ukončí závislý proces. |
12 |
Ukončovací kód 12 označuje, že testovací relace se nepovedlo spustit, protože klient nepodporuje žádnou z podporovaných verzí protokolu. |
13 |
Ukončovací kód 13 označuje, že se testovací relace zastavila kvůli dosažení zadaného počtu maximálního počtu neúspěšných testů pomocí --maximum-failed-tests možnosti příkazového řádku. Další informace najdete v části Možnosti v referenčních informacích k možnostem rozhraní příkazového řádku MTP. |
14 |
Návratový kód 14 znamená, že kompatibilní nástroj pro shromažďování pokrytí ohlásil, že vyhodnocení prahové hodnoty pokrytí selhalo. |
Explicitní --minimum-expected-tests hodnota nahrazuje --zero-tests-policy. Pokud není použita volba minimum, striktní zpracování testu nuly i nadále používá návratový kód 8. Ukončovací kódy 8 a 9 zůstávají odlišné, aby se nesplněný minimální požadavek nezaměňoval s modulem, v němž nebyly spuštěny žádné testy.
Pokud chcete povolit podrobné protokolování a řešit potíže, přečtěte si téma Diagnostické protokolování.
Žádné testy při běhu s více moduly
Když dotnet test spustí několik testovacích modulů, ukončovací kód 8 je signálem pro každý modul zvlášť, zatímco verdikt o nulovém počtu testů pro celé spuštění se určuje jednorázově na základě agregovaných výsledků. Jediný prázdný modul proto nezpůsobí selhání celého běhu, i když si modul ve výstupu ponechá svou Exit code: 8 diagnostiku. Pokud nenastavíte globální minimum, celé spuštění, v němž byly všechny testy přeskočeny, se považuje za spuštění s nulovým počtem testů bez ohledu na hodnotu --zero-tests-policy pro jednotlivé moduly. Další informace najdete v tématu Minima pro celý běh a jednotlivé moduly.
Poznámka:
Tento verdikt pro nulový počet testů v celém běhu vyžaduje sadu .NET SDK 11 nebo novější verzi.
Ignorovat konkrétní ukončovací kódy
MTP je navržený tak, aby byl ve výchozím nastavení striktní, ale umožňuje konfigurovatelnost. Proto je možné, aby se uživatelé rozhodli, které ukončovací kódy by se měly ignorovat (místo nich se vrátí ukončovací kód 0).
Pokud chcete ignorovat konkrétní ukončovací kódy, použijte možnost příkazového --ignore-exit-code řádku nebo proměnnou TESTINGPLATFORM_EXITCODE_IGNORE prostředí. Platný formát, který je přijat, je seznam ukončovacích kódů, oddělený středníkem, které se mají ignorovat (například --ignore-exit-code 2;3;8). Běžným scénářem je vzít v úvahu, že selhání testů by neměla mít za následek nenulový ukončovací kód (který odpovídá ignorování ukončovacího kódu 2).
Protokolování diagnostiky
Platforma poskytuje integrované diagnostické protokolování, které vám pomůže řešit potíže s prováděním testů. Protokolování diagnostiky můžete povolit prostřednictvím možností příkazového řádku nebo proměnných prostředí.
Možnosti příkazového řádku
Následující možnosti platformy poskytují užitečné informace pro řešení potíží s testovacími aplikacemi:
--info--diagnostic--diagnostic-synchronous-write--diagnostic-verbosity--diagnostic-file-prefix--diagnostic-output-directory
Proměnné prostředí
Diagnostické protokoly můžete povolit také pomocí proměnných prostředí:
| Název proměnné prostředí | Description |
|---|---|
TESTINGPLATFORM_DIAGNOSTIC |
Pokud je nastavená hodnota 1, povolí protokolování diagnostiky. |
TESTINGPLATFORM_DIAGNOSTIC_VERBOSITY |
Definuje úroveň podrobností. Dostupné hodnoty jsou Trace, Debug, Information, Warning, Errornebo Critical. |
TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_DIRECTORY |
Výstupní adresář protokolování diagnostiky, pokud není zadaný, soubor se vygeneruje ve výchozím adresáři TestResults. |
TESTINGPLATFORM_DIAGNOSTIC_FILE_PREFIX |
Předpona názvu souboru protokolu. Výchozí hodnota vytvoří <asm>_<tfm>_<arch>_<timestamp>.diag. K dispozici v MTP od verze 2.3.0; starší verze názvu TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_FILEPREFIX je stále dodržena kvůli zpětné kompatibilitě. |
TESTINGPLATFORM_DIAGNOSTIC_SYNCHRONOUS_WRITE |
Vynutí integrovaný nástroj pro záznam souborů, aby synchronně zapisoval protokoly. 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. K dispozici v MTP od verze 2.3.0; starší verze názvu TESTINGPLATFORM_DIAGNOSTIC_FILELOGGER_SYNCHRONOUSWRITE je stále dodržena kvůli zpětné kompatibilitě. |
Poznámka:
Proměnné prostředí mají přednost před argumenty příkazového řádku.
MTP zapíše diagnostický soubor pro každý zdroj testů. Pokud dva soubory dostanou stejné časové razítko, MTP místo přepsání existujícího souboru přidá příponu s ID procesu a čítačem.
Řešení chyb konfigurace
Microsoft.Testing.Platform.MSBuild
Níže jsou uvedené běžné chyby konfigurace související s Microsoft.Testing.Platform.MSBuild.
Chyba CS8892: Metoda TestingPlatformEntryPoint.Main(string[]) se nepoužije jako vstupní bod, protože byl nalezen synchronní vstupní bod Program.Main(string[]).
Ruční definování vstupního bodu (Main) v testovacím projektu nebo odkazování na testovací projekt z aplikace, která již obsahuje vstupní bod, vede ke konfliktu s vstupním bodem vygenerovaným MTP. Pokud se chcete tomuto problému vyhnout, proveďte jeden z těchto kroků:
Odeberte ručně definovaný vstupní bod, obvykle metodu
Mainv Program.cs, a nechte testovací platformu, aby ji vygenerovala za vás.Zakažte generování vstupního bodu nastavením vlastnosti
<GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>MSBuild.Úplně zakažte tranzitivní závislost na
Microsoft.Testing.Platform.MSBuildnastavením vlastnosti<IsTestingPlatformApplication>false</IsTestingPlatformApplication>MSBuild v projektu, který odkazuje na testovací projekt. To je potřeba, když odkazujete na testovací projekt z netestového projektu, například konzolové aplikace, která odkazuje na testovací aplikaci.
Vygenerovaný obor názvů kódu koliduje s odkazovaným typem
Microsoft.Testing.Platform.MSBuild generuje typy SelfRegisteredExtensions a TestingPlatformEntryPoint uvnitř $(RootNamespace) projektu. Ve výchozím nastavení RootNamespace odpovídá názvu projektu, který může kolidovat s typem stejného plně kvalifikovaného názvu vystaveného odkazovaným sestavením.
Například projekt s názvem System.Security.Cryptography.ProtectedData.Tests nakonec vygeneruje kód v oboru názvů System.Security.Cryptography.ProtectedData. Pokud projekt také odkazuje na balíček NuGet System.Security.Cryptography.ProtectedData, který obsahuje veřejný typ ProtectedData v oboru názvů System.Security.Cryptography, kompilátor již nedokáže rozlišit mezi vygenerovaným oborem názvů a referencovaným typem a vypisuje chyby, například CS0118 („ProtectedData“ je obor názvů, ale je použit jako typ).
Pokud chcete konflikt vyřešit, přepište RootNamespace v testovacím projektu hodnotu, která nekoliduje s žádným odkazovaným typem:
<PropertyGroup>
<RootNamespace>System.Security.Cryptography.ProtectedDataTests</RootNamespace>
</PropertyGroup>
RootNamespace můžete také úplně vyprázdnit (<RootNamespace />), v takovém případě budou generované typy umístěny do globálního oboru názvů.
Microsoft.Testing.Extensions.Fakes
Chyba Fakes: Nepodařilo se určit cestu profileru z proměnných prostředí COR_PROFILER_PATH a COR_PROFILER
K této chybě může dojít, pokud nejsou ve složce bin přítomna všechna sestavení Fakes.
- Ujistěte se, že projekt používá MSTest.SDK nebo odkazuje Microsoft.Testing.Extensions.Fakes.
- U projektů .NET Framework nepoužívejte nastavení
<PlatformTarget>AnyCPU</PlatformTarget>, protože výsledkem je, že NuGet nekopíruje všechny soubory do složky přihrádky.
Nerozpoznaná možnost příkazového řádku rozšíření
Možnost příkazového řádku specifická pro rozšíření může selhat s ukončovacím kódem 5, pokud testovací aplikace neregistruje balíček, který tuto možnost poskytuje. Například --report-trx vyžaduje Microsoft.Testing.Extensions.TrxReport, a to buď jako přímou referenci na balíček, nebo prostřednictvím konfigurace testovací sady SDK či profilu, který tento balíček zahrnuje. Jádro MTP neobsahuje sestavu, pokrytí kódu, výpis paměti, opakování ani jiné možnosti rozšíření.
Spusťte testovací aplikaci pomocí --help, nebo spusťte dotnet test --help v režimu MTP, abyste ověřili, že je tato možnost k dispozici. Pokud tato možnost chybí, přidejte její balíček rozšíření nebo ho povolte prostřednictvím testovacího SDK. Informace o požadovaném balíčku najdete v možnostech rozšíření podle scénáře .
Stejné selhání nastane, když řešení obsahuje projekty, které používají různé testovací architektury (například MSTest a xUnit.net) nebo různé sady rozšíření (například pouze některé projekty odkazují Microsoft.Testing.Extensions.HangDump). Možnost je platná pro jeden projekt, ale nerozpoznaná jiným projektem.
Pokud chcete tento problém vyřešit, použijte TestingPlatformCommandLineArguments vlastnost MSBuild s podmínkami ke směrování argumentů do správných projektů. Podrobné pokyny najdete v tématu Řešení se smíšenými testovacími architekturami nebo rozšířeními.