Megosztás a következőn keresztül:


A Microsoft.Testing.Platform áttekintése

A Microsoft.Testing.Platform egy egyszerű és hordozható alternatíva a VSTest a tesztek minden környezetben való futtatásához, beleértve a folyamatos integrációs (CI) folyamatokat, a parancssori felületet, a Visual Studio Test Explorert és a VS Code Test Explorert. A Microsoft.Testing.Platform közvetlenül a tesztprojektekbe van beágyazva, és nincsenek más alkalmazásfüggőségek, például vstest.console vagy dotnet test a tesztek futtatásához.

Microsoft.Testing.Platform nyílt forráskódú. Microsoft.Testing.Platform kódot microsoft/testfx GitHub-adattárban találja.

Microsoft.Testing.Platform alapelvek

Ez az új tesztelési platform a .NET fejlesztői élménytesztelési csapat tapasztalataira épül, és a .NET Core 2016-os kiadása óta felmerülő kihívások kezelésére törekszik. Bár a .NET-keretrendszer és a .NET Core/.NET között magas szintű kompatibilitás áll fenn, néhány kulcsfontosságú funkció, például a beépülő modulrendszer és a .NET-fordítások új lehetséges formai tényezői bonyolulttá tették az új futtatókörnyezeti funkciót a jelenlegi VSTest platform architektúrával.

Az új tesztplatform fejlődésének fő hajtó tényezőit az alábbiakban találja:

  • Determinizmus: Annak biztosítása, hogy ugyanazokat a teszteket különböző környezetekben (helyi, CI) futtassa, ugyanazt az eredményt fogja eredményezni. Az új futtatókörnyezet nem támaszkodik tükröződésre vagy bármely más dinamikus .NET-futtatókörnyezeti funkcióra a tesztfuttatás koordinálásához.

  • futtatókörnyezet átláthatósága: A tesztkörnyezet nem zavarja a teszt-keretrendszer kódját, nem hoz létre izolált környezeteket, például AppDomain vagy AssemblyLoadContext, és nem használ tükrözési vagy egyéni szerelvény-feloldókat.

  • bővítmények fordítási idejének regisztrálása: A bővítményeket, például a tesztelési keretrendszereket és a folyamaton kívüli bővítményeket a fordítási idő alatt regisztrálják a determinizmus biztosítása és az inkonzisztenciák észlelésének megkönnyítése érdekében.

  • Nulla függőségek: A platform magja egyetlen .NET-szerelvény, Microsoft.Testing.Platform.dll, amely a támogatott futtatókörnyezeteken kívül nem rendelkezik függőségekkel.

  • Üzemeltethető: A teszt futási ideje bármely .NET-alkalmazásban üzemeltethető. Bár a konzolalkalmazásokat gyakran használják tesztek futtatására, a tesztalkalmazásokat bármilyen .NET-alkalmazásban létrehozhatja. Ez lehetővé teszi a tesztek futtatását olyan speciális környezetekben, például eszközökön vagy böngészőkben, ahol korlátozások lehetnek.

  • Az összes .NET-űrlaptényező támogatása: Az aktuális és a jövőbeli .NET-űrlaptényezők támogatása, beleértve a natív AOT-t is.

  • Performant: A funkciók és a bővítménypontok közötti megfelelő egyensúly megtalálása a futtatókörnyezet nem alapvető kóddal való blobolásának elkerülése érdekében. Az új tesztplatform úgy lett kialakítva, hogy "vezényelje" a tesztfuttatást, ahelyett, hogy implementációval kapcsolatos részleteket szolgáltatna.

  • Bővíthető elég: Az új platform bővíthetőségi pontokra épül, így lehetővé teszi a futtatókörnyezet végrehajtásának maximális testreszabását. Lehetővé teszi a tesztfolyamat-gazdagép konfigurálását, a tesztelési folyamat megfigyelését és a tesztelési keretrendszerből származó információk felhasználását a tesztgazdafolyamaton belül.

  • egymodulos üzembe helyezési: Az üzemeltethetőségi funkció egyetlen modul üzembehelyezési modelljét teszi lehetővé, ahol egyetlen fordítási eredmény használható az összes bővíthetőségi pont támogatására, mind a folyamaton kívül, mind a folyamatban, anélkül, hogy különböző végrehajtható modulokat kellene szállítania.

Támogatott tesztelési keretrendszerek

  • MSTest. MSTestben a Microsoft.Testing.Platform támogatását a MSTest futóbiztosítja.
  • NUnit. A Microsoft.Testing.Platform támogatása a NUnit tesztfutókeresztül történik az NUnitban.
  • xUnit.net: Az xUnit.net-ben a Microsoft.Testing.Platform támogatása a xUnit.net futósegítségével történik.
  • TUnit: teljes egészében a Microsoft.Testing.Platformfölé épül, további információkért lásd TUnit dokumentációját.

Tesztek futtatása és hibakeresése

Microsoft.Testing.Platform tesztprojektek olyan futtatható fájlokként készülnek, amelyeket közvetlenül el lehet indítani, vagy hibakeresés céljából futtathatók. Nincs extra tesztfuttató konzol vagy parancs. Ha hiba történik, az alkalmazás nem aero kilépési kóddal lép ki, ami a legtöbb végrehajtható fájlra jellemző. További információ az ismert kilépési kódokról: Microsoft.Testing.Platform kilépési kódok.

Tipp

A parancssori beállítással figyelmen kívül hagyhat egy adott --ignore-exit-code.

A projektfájlban egy adott tesztprojektre vonatkozó parancssori beállításokat is megadhat a TestingPlatformCommandLineArguments MSBuild tulajdonság használatával. Az egyik gyakori használati eset az olyan tesztprojektek esetében, amelyek minden tesztet figyelmen kívül hagynak, és amelyek általában a 8- es kilépési kóddal lépnek ki (a tesztmunkamenet nulla tesztet futtatott). Ebben a forgatókönyvben a projektfájlban a PropertyGroup alá az alábbiak kerülhetnek hozzáadásra:

<TestingPlatformCommandLineArguments>$(TestingPlatformCommandLineArguments) --ignore-exit-code 8</TestingPlatformCommandLineArguments>

Fontos

Alapértelmezés szerint Microsoft.Testing.Platform telemetriát gyűjt. További információkért és lehetőségekért a leiratkozással kapcsolatban tekintse meg a Microsoft.Testing.Platform telemetriát.

A tesztprojekt közzététele dotnet publish és az alkalmazás közvetlen futtatása egy másik módszer a tesztek futtatására. Például a ./Contoso.MyTests.exe végrehajtása. Bizonyos esetekben a végrehajtható fájl létrehozásához dotnet build is használható, de vannak olyan szélsőséges esetek is, amelyeket érdemes megfontolni, például a natív AOT.

Használja a dotnet run-t

A dotnet run parancs használható a tesztprojekt létrehozásához és futtatásához. Ez a legegyszerűbb, bár néha leglassabb módszer a tesztek futtatására. A dotnet run használata gyakorlatias, ha helyileg szerkeszti és futtatja a teszteket, mivel biztosítja, hogy a tesztprojekt szükség esetén újraépüljön. dotnet run automatikusan megkeresi a projektet az aktuális mappában.

dotnet run --project Contoso.MyTests

A dotnet run-ról további információért lásd: dotnet run.

Használja a dotnet exec-t

A dotnet exec vagy dotnet parancs egy már létrehozott tesztprojekt végrehajtására (vagy futtatására) szolgál, ez alternatíva az alkalmazás közvetlen futtatására. dotnet exec a beépített tesztprojekt dll-jének elérési útját igényli.

dotnet exec Contoso.MyTests.dll

vagy

dotnet Contoso.MyTests.dll

Megjegyzés

A végrehajtható tesztprojekt elérési útjának (*.exe) megadása hibát eredményez:

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'

További információ a dotnet exec-ról: lásd dotnet exec.

Használja a dotnet test-t

Microsoft.Testing.Platform egy kompatibilitási réteget kínál a vstest.console.exe-gyel és dotnet test-vel, biztosítva, hogy a teszteket a megszokott módon futtathassa, miközben új végrehajtási forgatókönyveket is lehetővé tesz.

dotnet test Contoso.MyTests.dll

Beállítások

Az alábbi lista csak a platformbeállításokat ismertette. Az egyes bővítmények által megadott beállítások megtekintéséhez tekintse meg a bővítmény dokumentációjának lapját, vagy használja a --help lehetőséget.

  • @

    Megadja a válaszfájl nevét. A válaszfájl nevének azonnal követnie kell a @ karaktert, és nincs szóköz a @ karakter és a válaszfájl neve között.

    A válaszfájl beállításai úgy vannak értelmezve, mintha a parancssor ezen a helyén lennének. A válaszfájl minden argumentumának ugyanabban a sorban kell kezdődnie és végződnie. A fordított perjel karakter () nem használható vonalak összefűzésére. A válaszfájl használata nagyon hosszú parancsok esetén segít, amelyek túlléphetik a terminálkorlátokat. A válaszfájlokat beágyazott parancssori argumentumokkal kombinálhatja. Például:

    ./TestExecutable.exe @"filter.rsp" --timeout 10s
    

    ahol filter.rsp a következő tartalommal rendelkezhet:

    --filter "A very long filter"
    

    Vagy egyetlen rsp-fájl is használható az időtúllépés és a szűrés megadásához az alábbiak szerint:

    ./TestExecutable.exe @"arguments.rsp"
    
    --filter "A very long filter"
    --timeout 10s
    
  • --config-file

    Egy testconfig.json fájlt ad meg.

  • --diagnostic

    Engedélyezi a diagnosztikai naplózást. Az alapértelmezett naplószint a(z) Trace. A fájl a kimeneti könyvtárban van megírva a következő névformátummal, log_[MMddHHssfff].diag.

  • --diagnostic-filelogger-synchronouswrite

    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.

  • --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.

  • --diagnostic-output-fileprefix

    A naplófájl nevének előtagja. Alapértelmezett érték: "log_".

  • --diagnostic-verbosity

    Meghatározza a bőbeszédűség szintjét, amikor a --diagnostic kapcsoló használatban van. Az elérhető értékek a következők: Trace, Debug, Information, Warning, Errorvagy Critical.

  • --exit-on-process-exit

    Ha a függő folyamat kilép, lépjen ki a tesztelési folyamatból. A PID-t meg kell adni.

  • --help

    A parancs használatának leírását nyomtatja ki.

  • --ignore-exit-code

    Lehetővé teszi, hogy néhány nem nulla kilépési kód figyelmen kívül hagyható legyen, és ehelyett 0visszaadva. További információ: Adott kilépési kódok figyelmen kívül hagyása.

  • --info

    Speciális információkat jelenít meg a .NET-tesztalkalmazásról, például:

    • A platform.
    • A környezet.
    • Minden regisztrált parancssori szolgáltató, például a name, version, descriptionés options.
    • Minden regisztrált eszköz, például a command, name, version, description, és minden parancssori szolgáltató.

    Ezzel a funkcióval megismerheti azokat a bővítményeket, amelyek ugyanazt a parancssori beállítást regisztrálnák, vagy a bővítmény (vagy a platform) több verziója között elérhető lehetőségek változásait.

  • --list-tests

    Az elérhető tesztek listája. A tesztek nem lesznek végrehajtva.

  • --maximum-failed-tests

    Meghatározza a maximális teszthibák számát, amely elérésekor a tesztfuttatás leáll. Ennek a kapcsolónak a támogatásához a keretrendszer-szerzőknek implementálniuk kell a IGracefulStopTestExecutionCapability képességet. A teszthibák mennyiségének elérésekor a kilépési kód 13. További információ: Microsoft.Testing.Platform kilépési kódok.

    Megjegyzés

    Ez a funkció a Microsoft.Testing.Platform 1.5-ös verziójától kezdve érhető el.

  • --minimum-expected-tests

    Meghatározza a várhatóan futtatandó tesztek minimális számát. Alapértelmezés szerint legalább egy teszt futtatása várható.

  • --results-directory

    A könyvtár, ahova a teszteredményeket el fogják helyezni. Ha a megadott könyvtár nem létezik, az létrehozásra kerül. Az alapértelmezett TestResults a tesztalkalmazást tartalmazó könyvtárban.

  • --timeout

    A globális teszt végrehajtásának időtúllépése. Egy argumentumot sztringként használ a <value>[h|m|s] formátumban, ahol a <value> egy lebegőpontos szám.

MSBuild-integráció

A NuGet-csomag Microsoft.Testing.Platform.MSBuild különböző integrációkat biztosít az MSBuild Microsoft.Testing.Platform számára:

  • A dotnet testtámogatása. További információ: Tesztelés dotnet-teszttel.
  • Támogatás a ProjectCapability számára, amelyet a Visual Studio és Visual Studio Code Tesztböngészők igényelnek.
  • A belépési pont automatikus létrehozása (Main metódus).
  • A konfigurációs fájl automatikus létrehozása.

Megjegyzés

Ez az integráció tranzitív módon működik (a csomagra hivatkozó másik projektre hivatkozó projekt úgy fog viselkedni, mintha a csomagra hivatkozik), és letiltható a IsTestingPlatformApplication MSBuild tulajdonságon keresztül.

Lásd még: