Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit artikel bevat richtlijnen voor probleemoplossing voor MTP.
Afsluitcodes
MTP gebruikt bekende afsluitcodes om testfouten of app-fouten te communiceren. Afsluitcodes beginnen bij 0 en zijn niet-negatief.
| Afsluitcode | Bijzonderheden |
|---|---|
0 |
De 0 afsluitcode geeft aan dat het is gelukt. Alle tests die zijn gekozen om te worden uitgevoerd, zijn voltooid en er zijn geen fouten opgetreden. |
1 |
De 1 afsluitcode geeft onbekende fouten aan en fungeert als een catch all. Als u aanvullende foutinformatie en details wilt vinden, kijkt u in de uitvoer. |
2 |
Er wordt een afsluitcode van 2 gebruikt om aan te geven dat er ten minste één testfout is opgetreden. |
3 |
De afsluitcode 3 geeft aan dat de testsessie is afgebroken. Een sessie kan worden afgebroken met Ctrl+C, bijvoorbeeld. |
4 |
De afsluitcode 4 geeft aan dat de installatie van gebruikte extensies ongeldig is en dat de testsessie niet kan worden uitgevoerd. |
5 |
De afsluitcode 5 geeft aan dat de opdrachtregelargumenten die zijn doorgegeven aan de test-app, ongeldig waren. |
6 (niet meer gebruikt) |
Afsluitcode 6 wordt niet meer geproduceerd door het platform. Eerder werd aangegeven dat de testsessie een niet-geïmplementeerde functie gebruikte. |
7 |
De afsluitcode 7 geeft aan dat een testsessie niet kan worden voltooid en waarschijnlijk is vastgelopen. Het is mogelijk dat dit is veroorzaakt door een testsessie die is uitgevoerd via het uitbreidingspunt van een testcontroller. |
8 |
De afsluitcode 8 geeft aan dat de testsessie geen tests heeft gedetecteerd of dat elke geselecteerde test is overgeslagen onder de strikte --zero-tests-policy. |
9 |
De afsluitcode 9 geeft aan dat de uitvoering minder tests heeft uitgevoerd dan een expliciete --minimum-expected-tests waarde vereist, inclusief nultests. |
10 |
De afsluitcode 10 geeft aan dat de testadapter, Testing.Platform Test Framework, MSTest, NUnit of xUnit, geen tests heeft uitgevoerd om een infrastructuurreden die niet is gerelateerd aan de zelf van de test. Een voorbeeld is het niet kunnen creëren van een testomgeving die nodig is voor tests. |
11 |
De afsluitcode 11 geeft aan dat het testproces wordt afgesloten als het afhankelijke proces wordt afgesloten. |
12 |
De afsluitcode 12 geeft aan dat de testsessie niet kan worden uitgevoerd omdat de client geen ondersteuning biedt voor een van de ondersteunde protocolversies. |
13 |
De afsluitcode 13 geeft aan dat de testsessie is gestopt omdat het opgegeven aantal mislukte tests is bereikt met behulp van --maximum-failed-tests de opdrachtregeloptie. Zie de sectie Opties in de naslaginformatie over MTP CLI-opties voor meer informatie |
14 |
De afsluitcode 14 geeft aan dat een compatibele dekkingsverzamelaar een evaluatie van een mislukte dekkingsdrempel heeft gepubliceerd. |
Een expliciete --minimum-expected-tests waarde vervangt --zero-tests-policy. Zonder de minimale optie blijft de strikte nultestafhandeling de afsluitcode 8gebruiken. Afsluitcodes 8 en 9 blijven uniek, zodat een niet-gemeten minimum niet wordt verward met een module waarop geen tests zijn uitgevoerd.
Zie Diagnostische logboekregistratie om uitgebreide logboekregistratie in te schakelen en problemen op te lossen.
Nultests in een uitvoering met meerdere modules
Wanneer dotnet test meerdere testmodules uitvoert, is exitcode 8 een signaal op moduleniveau, terwijl het oordeel 'nul tests' voor de volledige uitvoering eenmalig wordt bepaald op basis van de geaggregeerde resultaten. Een enkele lege module mislukt daarom niet de hele uitvoering, hoewel de module de Exit code: 8 diagnostische gegevens in de uitvoer bewaart. Wanneer u geen globaal minimum instelt, wordt een volledige run waarin alles is overgeslagen behandeld als een run met nul tests, ongeacht de waarde per module --zero-tests-policy. Zie minimumaantallen voor volledige uitvoering en per module voor meer informatie.
Opmerking
Voor dit volledig uitgevoerde nultestbeoordeling is de .NET 11 SDK of een latere versie vereist.
Specifieke afsluitcodes negeren
MTP is standaard ontworpen om strikt te zijn, maar maakt configureerbaarheid mogelijk. Het is daarom mogelijk dat gebruikers bepalen welke afsluitcodes moeten worden genegeerd (er wordt een afsluitcode 0 geretourneerd in plaats van de oorspronkelijke afsluitcode).
Als u specifieke afsluitcodes wilt negeren, gebruikt u de --ignore-exit-code opdrachtregeloptie of de TESTINGPLATFORM_EXITCODE_IGNORE omgevingsvariabele. De geldige indeling die wordt geaccepteerd, is een door puntkomma's gescheiden lijst met afsluitcodes die moeten worden genegeerd (bijvoorbeeld --ignore-exit-code 2;3;8). Een veelvoorkomend scenario is om te overwegen dat testfouten niet resulteren in een niet-nul-afsluitcode (die overeenkomt met het negeren van afsluitcode 2).
Diagnostische logboeken
Het platform biedt ingebouwde logboekregistratie voor diagnostische gegevens om u te helpen bij het oplossen van problemen met de testuitvoering. U kunt diagnostische logboekregistratie inschakelen via opdrachtregelopties of omgevingsvariabelen.
Opdrachtregelopties
De volgende platformopties nuttige informatie bieden voor het oplossen van problemen met uw test-apps:
--info--diagnostic--diagnostic-synchronous-write--diagnostic-verbosity--diagnostic-file-prefix--diagnostic-output-directory
Omgevingsvariabelen
U kunt de diagnostische logboeken ook inschakelen met behulp van de omgevingsvariabelen:
| Naam van omgevingsvariabele | Description |
|---|---|
TESTINGPLATFORM_DIAGNOSTIC |
Als deze optie is ingesteld op 1, schakelt u de diagnostische logboekregistratie in. |
TESTINGPLATFORM_DIAGNOSTIC_VERBOSITY |
Definieert het uitgebreidheidsniveau. De beschikbare waarden zijn Trace, Debug, Information, Warning, Errorof Critical. |
TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_DIRECTORY |
De uitvoermap van de diagnostische logboekregistratie, indien niet opgegeven, wordt het bestand gegenereerd in de standaardmap TestResults map. |
TESTINGPLATFORM_DIAGNOSTIC_FILE_PREFIX |
Het voorvoegsel voor de naam van het logboekbestand. De standaard produceert <asm>_<tfm>_<arch>_<timestamp>.diag. Beschikbaar in MTP vanaf versie 2.3.0; de verouderde naam TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_FILEPREFIX wordt nog steeds gehonoreerd voor compatibiliteit met eerdere versies. |
TESTINGPLATFORM_DIAGNOSTIC_SYNCHRONOUS_WRITE |
Dwingt de ingebouwde bestandslogger om logboeken synchroon te schrijven. Handig voor scenario's waarin u geen logboekvermeldingen wilt verliezen (als het proces vastloopt). Dit vertraagt de uitvoering van de test. Beschikbaar in MTP vanaf versie 2.3.0; de verouderde naam TESTINGPLATFORM_DIAGNOSTIC_FILELOGGER_SYNCHRONOUSWRITE wordt nog steeds gehonoreerd voor compatibiliteit met eerdere versies. |
Opmerking
Omgevingsvariabelen hebben voorrang op de opdrachtregelargumenten.
MTP schrijft een diagnostisch bestand voor elke testbron. Als twee bestanden dezelfde tijdstempel ontvangen, voegt MTP een proces- en tellerachtervoegsel toe in plaats van een bestaand bestand te overschrijven.
Configuratiefouten oplossen
Microsoft.Testing.Platform.MSBuild
Hieronder volgen veelvoorkomende configuratiefouten met betrekking tot Microsoft.Testing.Platform.MSBuild.
fout CS8892: Methode 'TestingPlatformEntryPoint.Main(string[])' wordt niet gebruikt als invoerpunt omdat er een synchroon toegangspunt Program.Main(string[]) is gevonden
Handmatig een toegangspunt (Main) definiëren in een testproject of verwijzen naar een testproject vanuit een toepassing die al een ingangspunt heeft, resulteert in een conflict met het toegangspunt dat door MTP is gegenereerd. Voer een van de volgende stappen uit om dit probleem te voorkomen:
Verwijder het handmatig gedefinieerde toegangspunt, meestal
Mainmethode in Program.csen laat het testplatform er een voor u genereren.Schakel het genereren van het toegangspunt uit door de eigenschap
<GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>MSBuild in te stellen.Schakel de transitieve afhankelijkheid volledig uit naar
Microsoft.Testing.Platform.MSBuilddoor de eigenschap<IsTestingPlatformApplication>false</IsTestingPlatformApplication>MSBuild in het project in te stellen die verwijst naar een testproject. Dit is nodig wanneer u naar een testproject verwijst vanuit een niet-testproject, bijvoorbeeld een console-app die verwijst naar een testtoepassing.
De naamruimte van de gegenereerde code conflicteert met een type waarnaar wordt verwezen
Microsoft.Testing.Platform.MSBuild genereert de typen SelfRegisteredExtensions en TestingPlatformEntryPoint in de $(RootNamespace) van het project. Standaard komt RootNamespace overeen met de projectnaam, wat kan botsen met een type met dezelfde volledig gekwalificeerde naam dat beschikbaar wordt gesteld door een assembly waarnaar wordt verwezen.
Een project met de naam System.Security.Cryptography.ProtectedData.Tests genereert bijvoorbeeld code in de System.Security.Cryptography.ProtectedData naamruimte. Als het project ook verwijst naar het System.Security.Cryptography.ProtectedData NuGet-pakket, dat een openbaar ProtectedData type bevat onder de System.Security.Cryptography naamruimte, kan de compiler niet langer onderscheid maken tussen de gegenereerde naamruimte en het type waarnaar wordt verwezen, en fouten verzenden, zoals CS0118 'ProtectedData' is een naamruimte, maar wordt gebruikt als een type).
Om het conflict op te lossen, overschrijft u RootNamespace in uw testproject met een waarde die niet conflicteert met enig type waarnaar wordt verwezen:
<PropertyGroup>
<RootNamespace>System.Security.Cryptography.ProtectedDataTests</RootNamespace>
</PropertyGroup>
U kunt RootNamespace ook helemaal leegmaken (<RootNamespace />), in welk geval de gegenereerde typen in de globale naamruimte worden geplaatst.
Microsoft.Testing.Extensions.Fakes
Fout Mislukt kan profiler-pad niet oplossen vanuit COR_PROFILER_PATH en COR_PROFILER omgevingsvariabele.
Deze fout kan optreden als niet alle Fakes-assemblies aanwezig zijn in de bin-map.
- Zorg ervoor dat het project of gebruikmaakt van de MSTest.SDK- of verwijst naar Microsoft.Testing.Extensions.Fakes.
- Voor .NET Framework-projecten, vermijd het instellen van
<PlatformTarget>AnyCPU</PlatformTarget>, omdat hierdoor alle bestanden niet naar de bin-map worden gekopieerd.
Niet-herkende opdrachtregeloptie voor extensies
Een extensiespecifieke opdrachtregeloptie kan mislukken met afsluitcode 5 wanneer een testtoepassing het pakket dat de optie biedt, niet registreert. Bijvoorbeeld vereist Microsoft.Testing.Extensions.TrxReport--report-trx, als directe pakketverwijzing of via een test-SDK-configuratie of -profiel dat het pakket bevat. MTP-kern bevat geen rapport, codedekking, dump, nieuwe poging of andere uitbreidingsopties.
Voer de testtoepassing uit met --helpof voer deze uit dotnet test --help in de MTP-modus om te bevestigen dat de optie beschikbaar is. Als de optie ontbreekt, voegt u het uitbreidingspakket toe of schakelt u de extensie in via uw test-SDK. Zie uitbreidingsopties per scenario om het vereiste pakket te vinden.
Dezelfde fout treedt op wanneer een oplossing projecten bevat die gebruikmaken van verschillende testframeworks (bijvoorbeeld MSTest en xUnit.net) of verschillende sets extensies (bijvoorbeeld slechts enkele projectenverwijzing Microsoft.Testing.Extensions.HangDump). De optie is geldig voor het ene project, maar wordt niet herkend door een ander project.
Gebruik de TestingPlatformCommandLineArguments eigenschap MSBuild met voorwaarden om argumenten naar de juiste projecten te routeren om dit probleem op te lossen. Zie Oplossingen met gemengde testframeworks of extensies voor gedetailleerde instructies.