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


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

  1. A Teszt menüben válassza Az összes teszt kódlefedettségének elemzéselehetőséget.

    A Teszt menü képernyőképe, amelyen a kódlefedettség elemzése ki van emelve.

    A Teszt menü képernyőképe, amelyen a kódlefedettség elemzése ki van emelve.

    Borravaló

    A kódlefedettség a Test Explorer eszközablakból is futtatható.

  2. A tesztek futtatása után a Screenshot of Analyze code coverage menu in Visual StudioKó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.

    Képernyőkép a kiemelt kódlefedettségről.

    Képernyőkép a kiemelt kódlefedettségről.

    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.

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

    Képernyőkép a kódlefedettségi betűtípusokról és a színekről

    Képernyőkép a kódlefedettségi betűtípusokról és színekről.

  4. 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 Egyesítés ikonja gombot a Kódlefedettség ablakban.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.

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

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