Microsoft. Testing.Platform (MTP) hibaelhárítása

Ez a cikk az MTP hibaelhárítási útmutatóját tartalmazza.

dotnet test Jelentések No test projects were found

Ha dotnet test MTP módban fut egy megoldáson vagy projekten, kiértékeli a projekteket, és az MTP-tesztalkalmazások azonosítására használja IsTestingPlatformApplication . A tesztelési keretrendszer és a platformcsomagok általában ezt a tulajdonságot a NuGet MSBuild importálásán keresztül állítják be.

Az implicit visszaállítás elérhetővé teszi a csomagimportálásokat. A többfázisú tárolók buildjében azonban jelentéskészítést No test projects were found végezhet, dotnet test ha az alábbi feltételek mindegyike érvényes:

  • A tesztelési fázis --no-restore-t vagy --no-build-et használ, ami arra utal, hogy --no-restore.
  • A tesztszakasz nem tartalmazza a visszaállítás által létrehozott projektállapotot a obj mappában, vagy a teljes globális csomagmappát , amelyet a visszaállítási fázis használt.

A csomagimportálás IsTestingPlatformApplication nélkül üres értékre lehet kiértékelni, ezért dotnet test nem sorolja be a projektet MTP-tesztalkalmazásként. Ez a probléma nem az MSTestre vonatkozik.

A probléma megoldásához használja az alábbi módszerek egyikét:

  • Állítsa vissza a projektet a tesztelési szakaszban, mielőtt a dotnet test futtatására kerül sor.
  • Másolja vagy őrizze meg a visszaállítási fázisból a visszaállítási szakaszban létrehozott obj mappát és a teljes globális csomagmappát. A obj mappa olyan fájlokat tartalmaz, mint a project.assets.json, *.nuget.g.propsés *.nuget.g.targets. Ha beállítja NUGET_PACKAGES vagy RestorePackagesPathmegőrzi a globális csomagok mappát a konfigurált helyen.
  • Ha a tesztszakasz már elkészített tesztalkalmazásokat tartalmaz, de a projekt visszaállítási állapotát nem, használja a következőt dotnet test --test-modules <EXPRESSION>: . Ez a beállítás a projektértékelés nélküli beépített tesztmodulokat választja ki.

Kilépési kódok

Az MTP ismert kilépési kódokat használ a tesztelési hibák vagy alkalmazáshibák közlésére. A kilépési kódok 0-nél kezdődnek, és nem negatívak.

Kilépési kód Részletek
0 A 0 kilépési kód a sikerességet jelzi. Az összes futtatásra kiválasztott teszt befejeződött, és nem történt hiba.
1 A 1 kilépési kód ismeretlen hibákat jelez, és egyfajta általános gyűjtőként működik. További hibainformációkat és részleteket a kimenetben talál.
2 A rendszer egy kilépési 2 kóddal jelzi, hogy legalább egy teszthiba történt.
3 A kilépési kód 3 azt jelzi, hogy a tesztmunkamenet megszakadt. A munkamenetek például a CtrlC+ megszakíthatók.
4 A kilépési kód 4 azt jelzi, hogy a használt bővítmények beállítása érvénytelen, és a tesztmunkamenet nem futtatható.
5 A kilépési kód 5 azt jelzi, hogy a tesztalkalmazásnak átadott parancssori argumentumok érvénytelenek voltak.
6 (már nincs használatban) A kilépési kódot 6 a platform már nem hozza létre; korábban azt jelezte, hogy a tesztmunkamenet nem implementált funkciót használ.
7 A kilépési kód 7 azt jelzi, hogy a tesztelési munkamenet nem sikerült, és valószínűleg összeomlott. Lehetséges, hogy ezt egy tesztvezérlő bővítményén keresztül futtatott tesztmunkamenet okozta.
8 A kilépési kód 8 azt jelzi, hogy a tesztmunkamenet egyetlen tesztet sem talált, vagy hogy a szigorú --zero-tests-policy beállítás mellett minden kijelölt teszt ki lett hagyva.
9 A kilépési kód 9 azt jelzi, hogy a futtatás kevesebb tesztet hajtott végre, mint amennyit egy explicit --minimum-expected-tests érték igényel, beleértve a nulla tesztet is.
10 A kilépési kód 10 azt jelzi, hogy a tesztadapter, a Testing.Platform Test Framework, az MSTest, az NUnit vagy az xUnit nem futtatott teszteket olyan infrastruktúra-okból, amely nem kapcsolódik a teszt sajátjához. Ilyen például, ha nem sikerül létrehozni a tesztekhez szükséges szerelvényt.
11 A kilépési kód 11 azt jelzi, hogy a tesztfolyamat kilép, ha a függő folyamat kilép.
12 A kilépési kód 12 azt jelzi, hogy a tesztmunkamenet nem futott, mert az ügyfél nem támogatja a támogatott protokollverziókat.
13 A kilépési kód 13 azt jelzi, hogy a teszt munkamenete leállt, mert elérte a megadott számú sikertelen tesztet a parancssori beállítással --maximum-failed-tests . További információkért tekintse meg az MTP parancssori felületének Beállítások szakaszát
14 A kilépési kód 14 azt jelzi, hogy egy kompatibilis lefedettségi gyűjtő sikertelen lefedettségi küszöbérték-kiértékelést tett közzé.

A kifejezetten megadott --minimum-expected-tests érték elsőbbséget élvez a(z) --zero-tests-policy értékkel szemben. A minimális beállítás nélkül a szigorú nullateszt-kezelés továbbra is kilépési kódot 8használ. A 8 és 9 kilépési kódok továbbra is elkülönülnek, hogy a minimális követelmény nem teljesülése ne legyen összekeverhető egy olyan modullal, amelyben egyetlen teszt sem futott le.

A részletes naplózás engedélyezéséhez és a problémák elhárításához tekintse meg a diagnosztikai naplózást.

Nulla teszt többmodulos futtatásban

Amikor a(z) dotnet test több tesztmodult futtat, a 8 kilépési kód modulonkénti jelzés, míg a teljes futtatásra vonatkozó, nulla tesztet jelző döntés egyszer, az összesített eredmények alapján születik meg. Ezért egyetlen üres modul miatt nem bukik el a teljes futás, bár a modul Exit code: 8 diagnosztikai bejegyzése megmarad a kimenetben. Ha nincs beállítva globális minimum, a teljes egészében kihagyott futtatást a rendszer a modulonkénti --zero-tests-policy értéktől függetlenül nullatesztes futtatásként kezeli. További információ: Teljes futás és modulonkénti minimumok.

Megjegyzés:

A teljes körű nullatesztes ítélethez a .NET 11 SDK vagy egy újabb verzió szükséges.

Adott kilépési kódok figyelmen kívül hagyása

Az MTP alapértelmezés szerint szigorú, de konfigurálhatóságot tesz lehetővé. Így a felhasználók eldönthetik, hogy mely kilépési kódokat kell figyelmen kívül hagyni (a kilépési kód az eredeti kilépési 0 kód helyett lesz visszaadva).

Adott kilépési kódok figyelmen kívül hagyásához használja a --ignore-exit-code parancssori beállítást vagy a környezeti változót TESTINGPLATFORM_EXITCODE_IGNORE . Az elfogadott érvényes formátum a figyelmen kívül hagyandó kilépési kódok pontosvesszővel elválasztott listája (például --ignore-exit-code 2;3;8). Gyakori forgatókönyv az, hogy a tesztelési hibák nem eredményezhetnek nem nulla kilépési kódot (ami a kilépési kód 2 figyelmen kívül hagyásának felel meg).

Diagnosztikai naplózás

A platform beépített diagnosztikai naplózást biztosít a tesztvégrehajtás hibaelhárításához. A diagnosztikai naplózást parancssori beállításokkal vagy környezeti változókkal engedélyezheti.

Parancssori beállítások

A következő platformbeállítások hasznos információkat nyújtanak a tesztalkalmazások hibaelhárításához:

  • --info
  • --diagnostic
  • --diagnostic-synchronous-write
  • --diagnostic-verbosity
  • --diagnostic-file-prefix
  • --diagnostic-output-directory

Környezeti változók

A diagnosztikai naplókat a környezeti változók használatával is engedélyezheti:

Környezeti változó neve Description
TESTINGPLATFORM_DIAGNOSTIC Ha 1értékre van állítva, engedélyezi a diagnosztikai naplózást.
TESTINGPLATFORM_DIAGNOSTIC_VERBOSITY Meghatározza a részletességi szintet. Az elérhető értékek a következők: Trace, Debug, Information, Warning, Errorvagy Critical.
TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_DIRECTORY A diagnosztikai naplózás kimeneti könyvtára, ha nincs megadva, a fájl az alapértelmezett TestResults könyvtárban jön létre.
TESTINGPLATFORM_DIAGNOSTIC_FILE_PREFIX A naplófájl nevének előtagja. Az alapértelmezett beállítás a következőt hozza létre <asm>_<tfm>_<arch>_<timestamp>.diag: Az MTP-ben a 2.3.0-s verziótól kezdve érhető el; az örökölt nevet TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_FILEPREFIX továbbra is tiszteletben tartják a visszamenőleges kompatibilitás érdekében.
TESTINGPLATFORM_DIAGNOSTIC_SYNCHRONOUS_WRITE A beépített fájlnaplózót kényszeríti a naplók szinkronizálására. Olyan helyzetekben hasznos, amikor nem szeretné elveszíteni a naplóbejegyzéseket (ha a folyamat összeomlik). Ez lelassítja a teszt végrehajtását. Az MTP-ben a 2.3.0-s verziótól kezdve érhető el; az örökölt nevet TESTINGPLATFORM_DIAGNOSTIC_FILELOGGER_SYNCHRONOUSWRITE továbbra is tiszteletben tartják a visszamenőleges kompatibilitás érdekében.

Megjegyzés:

A környezeti változók elsőbbséget élveznek a parancssori argumentumokkal szemben.

Az MTP minden tesztforráshoz diagnosztikai fájlt ír. Ha két fájl ugyanazt az időbélyeget kapja, az MTP egy folyamat- és számláló-utótagot ad hozzá a meglévő fájlok felülírása helyett.

Konfigurációs hibák elhárítása

Microsoft.Testing.Platform.MSBuild

Az alábbiakban a Microsoft.Testing.Platform.MSBuild szolgáltatással kapcsolatos gyakori konfigurációs hibák szerepelnek.

CS8892 hiba: A "TestingPlatformEntryPoint.Main(string[])" metódus nem használható belépési pontként, mert a program.Main(sztring[])" szinkron belépési pont található

Egy tesztprojekt belépési pontjának (Main) manuális definiálása vagy tesztprojektre való hivatkozás egy olyan alkalmazásból, amely már rendelkezik belépési ponttal, ütközést eredményez az MTP által létrehozott belépési ponttal. A probléma elkerülése érdekében hajtsa végre az alábbi lépések egyikét:

  • Távolítsa el a manuálisan megadott belépési pontot, amely általában a Main metódus a Program.csfájlban, és hagyja, hogy a tesztelési platform hozzon létre Önnek egyet.

  • Tiltsa le a belépési pont létrehozását az <GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint> MSBuild tulajdonság beállításával.

  • A tesztprojektre hivatkozó projekt Microsoft.Testing.Platform.MSBuild MSBuild tulajdonságának beállításával teljesen tiltsa le a <IsTestingPlatformApplication>false</IsTestingPlatformApplication> tranzitív függőséget. Erre akkor van szükség, ha nem tesztprojektből származó tesztprojektre hivatkozik, például egy tesztalkalmazásra hivatkozó konzolalkalmazásra.

A létrehozott kódnévtér ütközik egy hivatkozott típussal

Microsoft.Testing.Platform.MSBuild létrehozza a SelfRegisteredExtensions és TestingPlatformEntryPoint típusokat a projekt $(RootNamespace). Alapértelmezés szerint a RootNamespace megegyezik a projekt nevével, ami ütközhet egy hivatkozott szerelvény által elérhetővé tett, azonos teljesen minősített névvel rendelkező típussal.

Például egy System.Security.Cryptography.ProtectedData.Tests nevű projekt végül a(z) System.Security.Cryptography.ProtectedData névtérben generál kódot. Ha a projekt a System.Security.Cryptography.ProtectedData névtér alatti ProtectedData nyilvános System.Security.Cryptography típust tartalmazó NuGet-csomagra is hivatkozik, a fordító már nem tud egyértelműsíteni a létrehozott névtér és a hivatkozott típus között, és olyan hibákat bocsát ki, mint CS0118 a ("Védett adatok" névtér, de típusként használják).

A konfliktus feloldásához a tesztprojektben bírálja felül a(z) RootNamespace értékét egy olyan értékre, amely egyetlen hivatkozott típussal sem ütközik:

<PropertyGroup>
  <RootNamespace>System.Security.Cryptography.ProtectedDataTests</RootNamespace>
</PropertyGroup>

A RootNamespace értékét teljesen törölheti (<RootNamespace />), ebben az esetben a generált típusok a globális névtérbe kerülnek.

Microsoft.Testing.Extensions.Fakes

Hamis hiba: Nem sikerült feloldani a profiler elérési útját COR_PROFILER_PATH és COR_PROFILER környezeti változókból

Ez a hiba akkor fordulhat elő, ha nem minden Fakes összetevő található a bin mappában.

  • Győződjön meg arról, hogy a projekt használja az MSTest.SDK-t , vagy hivatkozik a Microsoft.Testing.Extensions.Fakes-re .
  • .NET-keretrendszerprojektek esetében kerülje a <PlatformTarget>AnyCPU</PlatformTarget> beállítását, mivel ez azt eredményezi, hogy a NuGet nem másolja az összes fájlt a tárolómappába.

Ismeretlen bővítmény parancssori lehetősége

A bővítményspecifikus parancssori beállítás az 5-ös kilépési kóddal meghiúsulhat, ha egy tesztalkalmazás nem regisztrálja a lehetőséget biztosító csomagot. Például a(z) --report-trx megköveteli a(z) Microsoft.Testing.Extensions.TrxReport elemet, akár közvetlen csomaghivatkozásként, akár a csomagot tartalmazó teszt-SDK-konfiguráción vagy -profilon keresztül. Az MTP-alap nem tartalmaz jelentéseket, kódfedettséget, dumpokat, újrapróbálkozási vagy egyéb bővítményi lehetőségeket.

Futtassa a tesztalkalmazást a(z) --help elemmel, vagy futtassa a(z) dotnet test --help elemet MTP módban annak ellenőrzéséhez, hogy elérhető-e ez a beállítás. Ha a lehetőség hiányzik, adja hozzá a bővítménycsomagot, vagy engedélyezze a bővítményt a teszt SDK-val. A szükséges csomag megkereséséhez tekintse meg a bővítménybeállításokat forgatókönyv szerint .

Ugyanez a hiba akkor fordul elő, ha egy megoldás olyan projekteket tartalmaz, amelyek különböző tesztelési keretrendszereket (például MSTestet és xUnit.net) vagy különböző bővítménykészleteket (például csak néhány projekthivatkozást Microsoft.Testing.Extensions.HangDump) használnak. A beállítás érvényes az egyik projektre, de a másik nem ismeri fel.

A probléma megoldásához használja az TestingPlatformCommandLineArguments MSBuild tulajdonságot feltételekkel az argumentumok megfelelő projektekhez való átirányításához. Részletes útmutatásért lásd a vegyes tesztelési keretrendszereket vagy bővítményeket tartalmazó megoldásokat.