Kódlefedettség

Jótanács

A Microsoft.Testing.Platform.MSBuild (amely tranzitíven az MSTest, NUnit és xUnit futók által kerül be) használatakor a kódlefedettség kiterjesztések automatikusan regisztrálódnak, amikor a NuGet csomagokat telepítitek – kódmódosításra nincs szükség.

A kódlefedettségi funkciót a Microsoft.Testing.Platform (MTP) segítségével használhatja annak megállapítására, hogy a projekt kódjának hány százalékát tesztelik kódolt tesztek, például egységtesztek. A hibák elleni hatékony védelem érdekében a teszteknek gyakorolniuk kell, vagy terjedniük kell a kód nagy hányadára.

Microsoft-kódlefedettség

A Microsoft Code Coverage elemzése felügyelt (CLR) és nem felügyelt (natív) kód esetén egyaránt lehetséges. Mind a statikus, mind a dinamikus instrumentáció támogatott. Ehhez a bővítményhez a Microsoft.Testing.Extensions.CodeCoverage NuGet csomag szükséges.

Megjegyzés:

A nem felügyelt (natív) kódlefedettség alapértelmezés szerint le van tiltva a bővítményben. Szükség esetén aktiválásához használja a jelzőket EnableStaticNativeInstrumentation és EnableDynamicNativeInstrumentation. További információért a nem felügyelt kódlefedettségről lásd: Statikus és dinamikus natív műszerészet.

Fontos

A csomagot a Microsoft .NET könyvtárral szállítják, amely zárt forráskódú, de ingyenesen használható licencmodellt alkalmaz.

A Microsoft-kódlefedettségről további információt a GitHub oldalán talál.

Beállítások

Lehetőség Description
--coverage Gyűjtse össze a kódlefedettségeket a dotnet-coverage eszközzel.
--coverage-output A létrehozott lefedettségi fájl neve vagy elérési útja. A relatív elérési utak a teszteredmények könyvtárához viszonyítva oldódnak fel. Az alapértelmezett ebben a könyvtárban: <guid>.coverage. Lásd : Lefedettségi kimeneti fájlok.
--coverage-output-format Kimeneti fájlformátum. A támogatott értékek a következők: coverage, xmlés cobertura. Az alapértelmezett érték coverage.
--coverage-settings XML-kódlefedettségi beállítások.

Az elérhető beállításokkal kapcsolatos további információkért lásd: settings és samples.

Megjegyzés:

A Microsoft.Testing.Extensions.CodeCoverage alapértelmezett értéke IncludeTestAssembly, false, míg korábban a VSTestben true volt. Ez azt jelenti, hogy a tesztprojektek alapértelmezés szerint ki vannak zárva. További információ: Code Coverage configuration.

Lefedettségi kimeneti fájlok

Ha minden alkalmazás lefedettségi jelentését többmodulos dotnet test futtatásban szeretné megőrizni, hagyja ki --coverage-output. A bővítmény minden jelentésfájlhoz létrehoz egy GUID-alapú nevet, és kiválasztja a fájlkiterjesztést a következőből --coverage-output-format:

dotnet test -- --coverage --coverage-output-format cobertura

Ha megadja --coverage-output, dotnet test ugyanazt az értéket továbbítja minden tesztalkalmazásnak. A relatív elérési út az alkalmazás eredménykönyvtárából oldható fel; a megadott módon abszolút elérési utat használ. A beállítás nem kér egyesített megoldásszintű jelentést.

Warning

Az alapértelmezett flat elrendezésben az azonos kimeneti elérési utat használó alkalmazások felülírják egymás lefedettségi jelentéseit, még akkor is, ha az alkalmazások sorosan futnak. A tesztparancs az elveszett lefedettségre vonatkozó figyelmeztetés nélkül is sikeres lehet.

Ha ütközések nélkül szeretné megőrizni a rögzített relatív fájlnevet, használja az SDK -- előtti --results-directory-layout per-module beállítását:

dotnet test --results-directory-layout per-module -- --coverage --coverage-output-format cobertura --coverage-output my-output-file.xml

Minden alkalmazás a saját projekt-/keretrendszer-/futtatókörnyezeti könyvtára alá ír my-output-file.xml . Egy abszolút --coverage-output elérési út megkerüli ezeket a könyvtárakat. Ha külön szeretné tartani a riportokat, használjon relatív fájlnevet vagy egy másik abszolút elérési utat az egyes alkalmazásokhoz.

A kompatibilis lefedettségi bővítmények egyesíthetik a megőrzött jelentéseket artifact utófeldolgozással. Ez a funkció különálló a(z) --coverage-output elemtől, és nem tudja visszaállítani az egyesítés előtt felülírt adatokat.

A jelentésfájlnév-helyőrzők, például {asm}, {tfm} és {arch}, a tesztjelentésekre vonatkoznak, nem a --coverage-output elemre.

Lefedettségi összegzések és küszöbértékek

Fontos

Az első osztályú lefedettségi eredménymodell az MTP 2.4-től érhető el.

A kompatibilis gyűjtők egy korrelált tesztlefedettségi eredményként közzétehetnek fedett és lefedhető méréseket, küszöbérték-értékeléseket és lefedettségi jelentéshivatkozásokat. A terminál riportere és a kompatibilis jelentésfelhasználók a gyűjtőspecifikus fájlok elemzése nélkül jelenítik meg a méréseket és százalékos arányokat származtatnak.

A gyűjtők eldöntik, hogy közzéteszik-e ezt a modellt. A gyűjtemény és a küszöbértékek konfigurálásához használja a gyűjtő dokumentált beállításait.

Ha gyűjtőt ír, tegye közzé TestCoverageMessage, TestCoverageThresholdMessage és TestCoverageReportMessage az üzenetbuszon keresztül. A szerződésekhez és futtatható példákhoz a lefedettségi eredmények közzététele című témakörben olvashat. A jelentésbővítmények korrelált adataihoz használja a ITestCoverageResult és a ITestCoverageCapabilities szolgáltatásokat.

Ha egy közzétett küszöbérték kiértékelése sikertelen, az egyébként sikeres futtatás kóddal 14lép ki. Használja a --ignore-exit-code 14 elemet, ha azt szeretné, hogy a küszöbérték túllépése ne okozza a folyamat sikertelenségét.

Verziók kompatibilitása

Az alábbi táblázat a Microsoft.Testing.Extensions.CodeCoverage és az MTP különböző verziói közötti kompatibilitást mutatja.

Microsoft.Testing.Extensions.CodeCoverage MTP
18.1.x 2.0.x
18.0.x 1.8.x
17.14.x 1.6.2

Megjegyzés:

A legjobb kompatibilitás és a legújabb funkciók érdekében ajánlott mindkét csomag legújabb verzióit együtt használni.

Ágytakaró

A Coverlet Microsoft Tesztelési platform integrációja (coverlet.MTP) az MTP natív bővítménye, amely coverlet.collector funkciókat valósít meg.

Adja hozzá a coverlet.MTP NuGet-csomagot a teszt projektjéhez:

dotnet add package coverlet.MTP

A kódlefedettség gyűjtéséhez futtassa a teszteket a --coverlet jelzővel:

dotnet test --coverlet

Vagy futtassa a futtatható tesztet a --coverlet jelölővel:

dotnet exec <test-assembly.dll> --coverlet

A teszt futtatása után egy coverage.json , az eredményeket tartalmazó fájl jön létre az aktuális könyvtárban.

Beállítások

Lehetőség Description
--coverlet Kódlefedettségi adatgyűjtés engedélyezése.
--coverlet-output-format <format> A lefedettségi jelentés kimeneti formátumai. Támogatott formátumok: json, lcov, opencover, coberturaés teamcity. Többszöri megadás esetén több formátumot is megadhat.
--coverlet-include <filter> Olyan szerelvényeket is tartalmazzon, amelyek megfelelnek a szűrőknek, például [Assembly]Type. Adjon meg többször további szűrőket.
--coverlet-include-directory <path> Adjon meg további könyvtárakat a forrásfájlokhoz. Adja meg többször az utasítást további könyvtárak hozzáadásához.
--coverlet-exclude <filter> Ne tartalmazza azokat az assemblyket, amelyek megfelelnek a szűrőknek, például [Assembly]Type. Adjon meg többször további szűrőket.
--coverlet-exclude-by-file <pattern> Zárja ki a gömbmintáknak megfelelő forrásfájlokat. Több alkalommal adhat meg további mintákat.
--coverlet-exclude-by-attribute <attribute> Zárja ki az adott attribútumokkal dekorált metódusokat vagy osztályokat. Adjon meg többször további attribútumokat.
--coverlet-include-test-assembly Vegye fel a tesztszerelvényt a lefedettségi jelentésbe.
--coverlet-single-hit A találatok számát a kód minden helyéhez egy-egyre korlátozhatja.
--coverlet-skip-auto-props Hagyja ki az automatikusan implementált tulajdonságokat a lefedettségben.
--coverlet-does-not-return-attribute <attribute> Olyan attribútumok, amelyek olyan metódusokat jelölnek, amelyek nem adnak vissza értéket. Adjon meg többször további attribútumokat.
--coverlet-exclude-assemblies-without-sources <value> Zárja ki a forráskód nélküli összeállításokat. Értékek: MissingAll, MissingAnyés None.

További információkért lásd a coverlet.MTP-dokumentáció.