Kódlefedettség használata annak meghatározásához, hogy mennyi kódot tesztelnek
Annak megállapításához, hogy a projekt kódjának hány százalékát tesztelik kódolt tesztek, például egységtesztek, használhatja a Visual Studio kódlefedettségi funkcióját. A hibák elleni hatékony védelem érdekében a teszteknek a kód nagy részét kell gyakorolniuk vagy "lefedniük".
A kódlefedettség elemzése felügyelt (CLR) és nem felügyelt (natív) kód esetén is lehetséges. Mind a statikus, mind a dinamikus műszerezés támogatott. A kódlefedettség parancssori forgatókönyvekben való használatához használja vstest.console.exe vagy Microsoft.CodeCoverage.Console eszközt, amely a natív kódot is támogató dotnet-lefedettségi bővítménye.
A kódlefedettségi lehetőség a Teszt menüben érhető el, amikor tesztmetelyeket futtat a Test Explorerrel. Az eredménytábla az egyes szerelvényekben, osztályokban és eljárásokban végrehajtott kód százalékos arányát mutatja. A forrásszerkesztő kiemeli a tesztelt kódot. Az eredményeket olyan népszerű formátumokban exportálhatja, mint a Cobertura.
Követelmények
A kódlefedettségi funkció csak a Visual Studio Enterprise kiadásban érhető el.
Jegyzet
.NET-kódlefedettség esetén a parancssori eszközt is használhatja, dotnet-coverage.
Kódlefedettség elemzése
A Teszt menüben válassza Az összes teszt kódlefedettségének elemzéselehetőséget.
Borravaló
A kódlefedettség a Test Explorer eszközablakból is futtatható.
A tesztek futtatása után a
Kódlefedettségi eredmények ablakban válassza Kódlefedettségi színezés megjelenítése lehetőséget. Alapértelmezés szerint a tesztek által lefedett kód világoskék színnel van kiemelve.
A Kódlefedettségi színezés megjelenítése beállítás legördülő listájában kiválaszthatja, hogy a színezés a kódsorokra, a bal margón lévő karakterjelekre vagy mindkettőre vonatkozik-e.
A színek módosításához vagy félkövér arc használatához válassza Eszközök>Beállítások>Környezet>Betűtípusok és színek>A szövegszerkesztőbeállításainak megjelenítése. A Megjelenítési elemekterületen módosítsa a "Lefedettség" elemek beállításait, például a Lefedettség - Érintetlen terület.
Ha az eredmények alacsony lefedettséget mutatnak, vizsgálja meg, hogy a kód mely részeit nem gyakorolják, és írjon további teszteket, hogy lefedje őket. A fejlesztői csapatok általában körülbelül 80% kódlefedettségre törekszenek. Bizonyos esetekben az alacsonyabb lefedettség elfogadható. Az alacsonyabb lefedettség például elfogadható, ha egy kód egy standard sablonból jön létre.
Borravaló
A kódlefedettség optimalizálása:
- Kapcsolja ki a fordítóoptimalizálást.
- Ha nem felügyelt (natív) kóddal dolgozik, használjon hibakeresési buildet.
- Hozzon létre .pdb (szimbólum) fájlokat az egyes szerelvényekhez.
Ha nem kapja meg a várt eredményeket, tekintse meg A kódlefedettségihibaelhárítása című témakört.
A kód frissítése után ne felejtse el újra lefuttatni a kódlefedettségi tesztet. A lefedettségi eredmények és a kódszínezés nem frissül automatikusan a kód módosítása vagy tesztek futtatása után.
Borravaló
A Visual Studio 2022 17.2-es verziójától kezdve engedélyezheti a legújabb kódlefedettségi funkciókat a Eszközök > Beállítások > Környezeti > Előzetes verziójú funkciók, majd a Kódlefedettségi funkciók fejlesztéseikiválasztásával, majd a Visual Studio újraindításával.
Jelentés blokkokban vagy sorokban
A kódlefedettséget a blokkokban számolják. A blokk egy kód része, amely pontosan egy belépési és kilépési ponttal rendelkezik. Ha a program vezérlőfolyamata áthalad egy blokkon egy tesztfuttatás során, akkor a program ezt a blokkot lefedettnek tekinti. A blokk hányszor van használatban, nincs hatással az eredményre.
A sorokhoz tartozó eredményeket úgy is megjelenítheti, hogy a táblázatfejlécben az Oszlopok hozzáadása/eltávolítása elemet választja. Egyes felhasználók a sorok számát részesítik előnyben, mert a százalékok jobban megfelelnek a forráskódban látható töredékek méretének. A hosszú számítási blokk egyetlen blokknak számít, még akkor is, ha sok sort foglal el.
Borravaló
A kódsorok több kódblokkot is tartalmazhatnak. Ha ez a helyzet, és a tesztfuttatás a sor összes kódblokkját lefuttatja, az egy sornak számít. Ha a sor egyes, de nem minden kódblokkjait tesztelik, az részleges sornak számít.
Kódlefedettségi eredmények nézetei
A Kódlefedettségi eredmények ablak általában a jelentést a projekt/osztály/metódus hierarchiájában strukturálja. Ezt úgy módosíthatja, hogy a lefedettség a címtár/fájl/metódus szintjén jelenjen meg.
- A forrásjelentésmegtekintéséhez válassza a Kódlefedettségi nézetek konfigurálása ikont a Kódlefedettségi eredmények ablakban. Ezután válassza a Forrásnézet lehetőséget a Jelentésstílus legördülő listából.
A Kódlefedettségi eredmények ablak általában a teljes megoldás eredményét jeleníti meg. Az eredmények szűrhetők úgy, hogy csak az aktuális ágban frissített fájlok eredményei jelenjenek meg.
- A változáskészlet-jelentésmegtekintéséhez válassza ki a Kódlefedettségi nézetek konfigurálása ikont a Kódlefedettségi eredmények ablakban. Ezután a Jelentéstartalom legördülő listában válassza Változáskészlet jelentés lehetőséget. Frissítse az aktív adattárat és az alapágat, hogy elkészíthető legyen az összehasonlítási jelentés.
A Kódlefedettségi eredmények ablak keresőmezőjében többféleképpen is szűrhető a jelentés.
- Ha Keresés név szerint (Csak azokat jeleníti meg, amelyek egyeznek a keresési kifejezéssel az ablakban), írja be a keresési kifejezést a keresőmezőbe.
- A "Típus szerinti szűréshez" írja be a típus nevét a keresőmezőbe.
- Ha Az összes megjelenítése törölje a keresőmezőt.
- A 100% teljesmegjelenítéséhez írja be a keresőmezőbe a "Fedett (%Lines)":"100" kifejezést.
- A megjelenítéséhez (>0% && < 100%) arészleges lefedettségével, írja be a "Részlegesen lefedett (%Lines)":"<##" kifejezést, ahol a ## helyére a lefedettségi százalékot írja.
- Ha 0% fedettmegjelenítéséhez írja be a keresőmezőbe a "Nem fedett (%Lines)":"0" kifejezést.
Kódlefedettségi eredmények kezelése
A Kódlefedettségi eredmények ablak általában a legutóbbi futtatás eredményét jeleníti meg. Az eredmények eltérőek lesznek, ha módosítja a tesztadatokat, vagy ha csak néhány tesztet futtat minden alkalommal.
A Kódlefedettségi eredmények ablak a korábbi eredmények, illetve a más számítógépeken kapott eredmények megtekintésére is használható.
Több futtatás eredményét egyesítheti, például különböző tesztadatokat használó futtatásokból.
A korábbi találatok egyikénekmegtekintéséhez válassza ki azt a legördülő menüből. A menü egy ideiglenes listát jelenít meg, amely egy új megoldás megnyitásakor törlődik.
Az előző munkameneteredményeinek megtekintéséhez válassza az Eredmények importálásalehetőséget, keresse meg a megoldás TestResults mappáját, és importáljon egy .coverage fájlt.
A lefedettségi színezés helytelen lehet, ha a forráskód megváltozott a .coverage fájl létrehozása óta.
Ha szövegként szeretné olvashatóvá tenni az eredményeket, válassza az Eredmények exportálásalehetőséget, válassza a .xmlMentés típuskéntlehetőséget. Ez egy olvasható .xml fájlt hoz létre, amelyet más eszközökkel is feldolgozhat, vagy könnyen elküldhet e-mailben. Kiválaszthatja az olyan exportálási formátumokat is, mint a Cobertura.
Ha másnakszeretne eredményeket küldeni, küldjön egy .coverage fájlt vagy egy exportált .xml fájlt. Ezután importálhatják a fájlt. Ha ugyanaz a verzió van meg nekik a forráskódból, láthatják a lefedettség színezését.
Eredmények egyesítése különböző futtatásokból
Bizonyos esetekben a kód különböző blokkokat használ a tesztadatoktól függően. Ezért érdemes lehet kombinálni a különböző tesztfuttatások eredményeit.
Tegyük fel például, hogy amikor "2" bemenettel futtat egy tesztet, azt tapasztalja, hogy egy adott függvény 50% vonatkozik. Amikor másodszor futtatja a tesztet a "-2" bemenettel, a lefedettségi színező nézetben láthatja, hogy a függvény másik 50% lefedi. Most egyesítse a két teszt eredményeit, és a jelentés és a lefedettség színező nézete azt mutatja, hogy a függvény 100% volt lefedve.
Használja Találatok egyesítése ehhez. A legutóbbi futtatások vagy az importált eredmények tetszőleges kombinációját választhatja. Ha egyesíteni szeretné az exportált eredményeket, először importálnia kell őket.
Az egyesítési művelet eredményeit a Eredmények exportálása használatával mentheti.
Az egyesítés korlátozásai
Ha a kód különböző verzióiból egyesít lefedettségi adatokat, az eredmények külön jelennek meg, de nem lesznek kombinálva. A teljes körűen egyesített eredmények eléréséhez használja a kód ugyanazon buildét, amely csak a tesztadatokat módosítja.
Ha egy exportált és importált találatfájlt egyesít, az eredményeket csak sorok szerint tekintheti meg, blokkok szerint nem. A soradatok megjelenítéséhez használja az Oszlopok hozzáadása/eltávolítása parancsot.
Ha egy ASP.NET projekt tesztjeiből egyesít eredményeket, a különálló tesztek eredményei megjelennek, de nem egyesülnek. Ez a viselkedés csak a ASP.NET összetevőkre vonatkozik: a rendszer minden más szerelvények eredményeit egyesíti.
Elemek kizárása a kódlefedettségi eredményekből
Előfordulhat, hogy a kód bizonyos elemeit ki szeretné zárni a lefedettségi pontszámokból, például ha a kód szövegsablonból jön létre. Adja hozzá a System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute attribútumot az alábbi kódelemek bármelyikéhez: osztály, szerkezet, metódus, tulajdonság, tulajdonságválasztó vagy getter esemény.
Borravaló
Az osztály kizárása nem zárja ki a származtatott osztályokat.
Például:
using System.Diagnostics.CodeAnalysis;
...
public class ExampleClass1
{
[ExcludeFromCodeCoverage]
void ExampleMethod() {...}
[ExcludeFromCodeCoverage] // exclude property
int ExampleProperty1
{ get {...} set{...}}
int ExampleProperty2
{
get
{
...
}
[ExcludeFromCodeCoverage] // exclude setter
set
{
...
}
}
}
[ExcludeFromCodeCoverage]
class ExampleClass2 { ... }
Használja a következő makrókat:
ExcludeFromCodeCoverage(
KizárásNév, L"
FunkcióNév");
ExcludeSourceFromCodeCoverage(
ExclusionName, L"
SourceFilePath");
ExclusionName bármelyik egyedi név.
FunctionName egy teljesen minősített függvénynév. Tartalmazhat helyettesítő karaktereket. Egy osztály összes függvényének kizárásához például írjon
MyNamespace::MyClass::*
SourceFilePath egy .cpp fájl helyi vagy UNC elérési útja. Tartalmazhat helyettesítő karaktereket. Az alábbi példa kizárja az adott könyvtárban lévő összes fájlt:
\\MyComputer\Source\UnitTests\*.cpp
#include <CodeCoverage\CodeCoverage.h>
Hívja meg a kizárási makrókat a globális névtérben, ne valamelyik névtérben vagy osztályban.
A kizárásokat elhelyezheti az egységteszt kódfájljában vagy az alkalmazás kódfájljában.
A kizárásokat nem felügyelt (natív) kódként kell lefordítani a fordító beállításával vagy a
#pragma managed(off)
használatával.
Jegyzet
A C++/CLI-kódban lévő függvények kizárásához alkalmazza a [System::Diagnostics::CodeAnalysis::ExcludeFromCodeCoverage]
attribútumot a függvényre. Ez ugyanaz, mint a C# esetében.
További elemek belefoglalása vagy kizárása
A kódlefedettség elemzése csak a betöltött assemblyk esetében történik, és csak akkor, ha egy .pdb fájl elérhető ugyanabban a könyvtárban, mint a .dll vagy .exe fájl. Ezért bizonyos körülmények között kiterjesztheti a mellékelt szerelvényeket a megfelelő .pdb fájlok másolatainak lekérésével.
Egy .runsettings fájl megírásával szabályozhatja, hogy mely szerelvények és elemek legyenek kiválasztva a kódlefedettség-elemzéshez. Például kizárhat bizonyos típusú összeállításokat anélkül, hogy attribútumokat kellene hozzáadnia az osztályaikhoz. További információ: A kódlefedettségi elemzés testreszabása.
Kódlefedettség elemzése az Azure Pipelinesban
A kód beadásakor a tesztek a buildkiszolgálón futnak, a többi csapattag tesztjével együtt. Érdemes elemezni az Azure Pipelines kódlefedettségeit, hogy a lehető legtöbb up-to-date és átfogó képet kapjon a teljes projekt lefedettségéről. Az Azure Pipelinesban a kódlefedettség automatizált rendszerteszteket és más kódolt teszteket is tartalmaz, amelyeket általában nem futtat a fejlesztői gépeken.
Kódlefedettség elemzése a parancssorból
Ha a parancssorból szeretne teszteket futtatni, használja vstest.console.exe segédprogramot. A kódlefedettség a beállítás által meghívott /EnableCodeCoverage
segédprogram egyik lehetősége.
Indítsa el a Visual Studio fejlesztői parancssorát:
A Windows Start menüben keressen
Developer Command Prompt for VS
, és válassza ki a keresési szöveghez társított alkalmazáseredményt.A parancssorban futtassa a következő parancsot:
vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage
Borravaló
Fejlesztői PowerShell esetén a rendszerhéj kezdőkönyvtára a Visual Studio Projekt helye. Cserélje le a MyTestAssembly.dll kifejezéseket az elérési útra és a tesztfájl nevére. További információ: VSTest.Console.exe parancssori beállítások.
Hibaelhárítás
Ha nem látja a kódlefedettségi eredményeket, a A kódlefedettség hibaelhárítása cikk segíthet.