Använda kodtäckning för att avgöra hur mycket kod som testas
Om du vill ta reda på vilken andel av projektets kod som testas av kodade tester, till exempel enhetstester, kan du använda kodtäckningsfunktionen i Visual Studio. För att effektivt skydda dig mot buggar bör dina tester träna eller "täcka" en stor del av koden.
Kodtäckningsanalys är möjlig för både hanterad (CLR) och ohanterad (intern) kod. Både statisk och dynamisk instrumentering stöds. Om du vill använda kodtäckning i kommandoradsscenarier använder du antingen vstest.console.exe eller Microsoft.CodeCoverage.Console-verktyget, som är ett tillägg för dotnet-täckning som också stöder intern kod.
Kodtäckningsalternativet är tillgängligt på testmenyn när du kör testmetoder med testutforskaren. Resultattabellen visar procentandelen av koden som körs i varje sammansättning, klass och procedur. Källredigeraren visar den testade koden. Du kan exportera resultaten i populära format som Cobertura.
Krav
Funktionen för kodtäckning är endast tillgänglig i Visual Studio Enterprise-utgåvan.
Anteckning
För .NET-kodtäckning kan du alternativt använda kommandoradsverktyget dotnet-coverage.
Analysera kodtäckning
På menyn Test väljer du Analysera kodtäckning för alla tester.
Tips
Du kan också köra kodtäckning från verktygsfönstret Test Explorer.
När testerna har körts, välj för att se vilka rader som har körts, Visa kodtäckningsfärgning i fönstret Kodtäckningsresultat. Som standard markeras kod som omfattas av tester i ljusblå.
I listrutan för alternativet Visa kodtäckningsfärgning kan du välja om färgning ska gälla för kodrader, glyfer i vänstermarginalen eller båda.
Om du vill ändra färger eller använda fetstil väljer du Verktyg>Alternativ>Miljö>Teckensnitt och färger>Visa inställningar för: Textredigeraren. Under Visa objektjusterar du inställningarna för objekten "Täckning", till exempel Täckning inte rört område.
Om resultaten visar låg täckning undersöker du vilka delar av koden som inte används och skriver fler tester för att täcka dem. Utvecklingsteam strävar vanligtvis efter cirka 80% kodtäckning. I vissa situationer är lägre täckning acceptabel. Till exempel är lägre täckning acceptabel där viss kod genereras från en standardmall.
Tips
Så här optimerar du kodtäckningen:
- Stäng av kompilatoroptimering.
- Om du arbetar med ohanterad (intern) kod använder du en felsökningsversion.
- Generera .pdb-filer (symbol) för varje sammansättning.
Om du inte får de resultat du förväntar dig kan du läsa Felsöka kodtäckning.
Glöm inte att köra kodtäckningen igen när du har uppdaterat koden. Täckningsresultat och kodfärgning uppdateras inte automatiskt när du har modifierat koden eller när du kör tester.
Tips
Från och med Visual Studio 2022 version 17.2 kan du aktivera de senaste funktionerna för kodtäckning genom att välja Tools > Options > Environment > Preview Featuresoch sedan välja Förbättringar av kodtäckningenoch sedan starta om Visual Studio.
Rapportera i block eller rader
Kodtäckning räknas i block. Block är en del av koden med exakt en start- och slutpunkt. Om programmets kontrollflöde passerar genom ett block under en testkörning räknas blocket som täckt. Antalet gånger som blocket används påverkar inte resultatet.
Du kan också visa resultatet för rader genom att välja Lägg till/ta bort kolumner i tabellrubriken. Vissa användare föredrar antalet rader eftersom procentandelarna motsvarar storleken på fragmenten som visas i källkoden. Ett långt beräkningsblock skulle räknas som ett enda block även om det upptar många rader.
Tips
En kodrad kan innehålla mer än ett kodblock. Om så är fallet och testkörningen utför alla kodblock på raden räknas den som en rad. Om vissa men inte alla kodblock på raden används räknas det som en partiell rad.
Resultatvyer för kodtäckning
Fönstret Kodtäckningsresultat strukturerar vanligtvis rapporten i projekt-/klass-/metodhierarkin. Du kan ändra detta för att visa täckningen på katalog-/fil-/metodnivå.
- Om du vill visa källrapportenväljer du ikonen Konfigurera kodtäckningsvyer i fönstret Kodtäckningsresultat. Välj sedan Källvy från rullgardinsmenyn för rapportstil.
Fönstret Kodtäckningsresultat visar vanligtvis resultatet för hela lösningen. Resultatet kan filtreras för att endast visa resultatet för de filer som har uppdaterats i den aktuella grenen.
- Om du vill visa ändringsrapportenväljer du ikonen Konfigurera kodtäckningsvyer i Kodtäckningsresultat-fönstret . Välj sedan Changeset Report från listrutan Rapportinnehåll. Uppdatera den aktiva lagringsplatsen och basgrenen så att den kan jämföras med för att tillhandahålla jämförelserapporten.
I sökrutan i fönstret kodtäckningsresultat finns det flera sätt att filtrera rapporten.
- Om du vill Sök efter namn (Visa endast de som matchar söksträngen i fönstret) anger du söksträngen i sökrutan.
- Om du vill Filtrera efter typ ange namnet på typen i sökrutan.
- För att visa alla, rensa sökrutan.
- Om du vill Visa 100% fullständigt täcktanger du "Täckt (%Lines)":"100" i sökrutan.
- För att Show (>0% && < 100%) delvis täckt, ange "Delvis täckt (%Lines)":"<##" och ersätt ## med procentandelen som är täckt.
- Om du vill Visa 0% täcktanger du "Inte täckt (%Lines)":"0" i sökrutan.
Hantera resultat för kodtäckning
Fönstret kodtäckningsresultat visar vanligtvis resultatet av den senaste körningen. Resultaten varierar om du ändrar dina testdata eller om du bara kör några av dina tester varje gång.
Fönstret kodtäckningsresultat kan också användas för att visa tidigare resultat eller resultat som erhållits på andra datorer.
Du kan slå samman resultatet av flera körningar, till exempel från körningar som använder olika testdata.
Om du vill visa en tidigare uppsättning resultatväljer du den i den nedrullningsbara menyn. Menyn visar en tillfällig lista som rensas när du öppnar en ny lösning.
Om du vill visa resultat från en tidigare sessionväljer du Importera resultat, navigerar till mappen TestResults i lösningen och importerar en .coverage--fil.
Täckningsfärgningen kan vara felaktig om källkoden har ändrats sedan .coverage- fil genererades.
Om du vill göra resultatet läsbart som textväljer du Exportera resultatgenom att välja .xml som Spara som typ. Detta genererar en läsbar .xml fil, som du kan bearbeta med andra verktyg eller enkelt skicka med e-post. Du kan också välja exportformat som Cobertura.
Om du vill skicka resultat till någon annanskickar du antingen en .coverage--fil eller en exporterad .xml fil. De kan sedan importera filen. Om de har samma version av källkoden kan de se täckningsfärgning.
Sammanfoga resultat från olika körningar
I vissa situationer används olika block i koden beroende på testdata. Därför kanske du vill kombinera resultaten från olika testkörningar.
Anta till exempel att när du kör ett test med indata "2" ser du att 50% för en viss funktion omfattas. När du kör testet en andra gång med indatan "-2" ser du i vyn för täckningsfärgning att de övriga 50% för funktionen täcks. Nu sammanfogar du resultaten från de två testkörningarna och vyn rapport- och täckningsfärg visar att 100% av funktionen har täckts.
Använd ikonen Använd sammanslagna resultat för att göra detta. Du kan välja valfri kombination av de senaste körningarna eller importerade resultat. Om du vill kombinera exporterade resultat måste du importera dem först.
Använd Exportera resultat för att spara resultatet av en sammanslagningsåtgärd.
Begränsningar i sammanslagning
Om du sammanfogar täckningsdata från olika versioner av koden visas resultaten separat, men de kombineras inte. Om du vill få fullständigt kombinerade resultat använder du samma version av koden och ändrar endast testdata.
Om du sammanfogar en resultatfil som har exporterats och sedan importerats kan du bara visa resultatet efter rader, inte efter block. Använd kommandot Lägg till/ta bort kolumner för att visa raddata.
Om du sammanfogar resultat från tester av ett ASP.NET projekt visas resultatet för de separata testerna, men kombineras inte. Det här beteendet gäller endast själva ASP.NET artefakter: resultat för andra sammansättningar kombineras.
Exkludera element från kodtäckningsresultatet
Du kanske vill exkludera specifika element i koden från täckningspoängen, till exempel om koden genereras från en textmall. Lägg till attributet System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute till något av följande kodelement: klass, struktur, metod, egenskap, egenskapsättare eller getter, händelse.
Tips
Exkludera en klass utesluter inte dess härledda klasser.
Till exempel:
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 { ... }
Använd följande makron:
ExcludeFromCodeCoverage(
ExclusionName, L"
FunctionName");
ExcludeSourceFromCodeCoverage(
ExclusionName, L"
SourceFilePath");
ExclusionName är ett unikt namn.
FunctionName är ett fullständigt kvalificerat funktionsnamn. Den kan innehålla jokertecken. Om du till exempel vill exkludera alla funktioner i en klass skriver du
MyNamespace::MyClass::*
SourceFilePath är den lokala sökvägen eller UNC-sökvägen för en .cpp fil. Den kan innehålla jokertecken. I följande exempel undantas alla filer i en viss katalog:
\\MyComputer\Source\UnitTests\*.cpp
#include <CodeCoverage\CodeCoverage.h>
Placera anrop till exkluderingsmakronen i det globala namnområdet, inte inom något namnområde eller någon klass.
Du kan placera undantagen antingen i enhetstestkodfilen eller programkodfilen.
Undantagen måste kompileras som ohanterad (intern) kod, antingen genom att ställa in kompilatoralternativet eller med hjälp av
#pragma managed(off)
.
Not
Om du vill exkludera funktioner i C++/CLI-kod använder du attributet [System::Diagnostics::CodeAnalysis::ExcludeFromCodeCoverage]
för funktionen. Detta är samma som för C#.
Inkludera eller exkludera ytterligare element
Kodtäckningsanalys utförs endast på sammansättningar som läses in och för vilka en .pdb- fil är tillgänglig i samma katalog som filen .dll eller .exe. I vissa fall kan du därför utöka den uppsättning sammansättningar som ingår genom att hämta kopior av lämpliga .pdb- filer.
Du kan utöva mer kontroll över vilka sammansättningar och element som väljs för kodtäckningsanalys genom att skriva en .runsettings fil. Du kan till exempel exkludera sammansättningar av vissa typer utan att behöva lägga till attribut i deras klasser. Mer information finns i Anpassa kodtäckningsanalys.
Analysera kodtäckning i Azure Pipelines
När du checkar in koden körs testerna på byggservern tillsammans med tester från andra teammedlemmar. Det är användbart att analysera kodtäckning i Azure Pipelines för att få ut mesta möjliga up-to- datum och omfattande bild av täckningen i hela projektet. Kodtäckning i Azure Pipelines omfattar även automatiserade systemtester och andra kodade tester som du vanligtvis inte kör på utvecklingsdatorerna.
Analysera kodtäckning från kommandoraden
Om du vill köra tester från kommandoraden använder du verktyget vstest.console.exe. Kodtäckning är ett alternativ för vstest.console.exe-verktyget som anropas med alternativet /EnableCodeCoverage
.
Starta utvecklarkommandotolken i Visual Studio:
I menyn Windows Starta söker du
Developer Command Prompt for VS
och väljer appresultatet som är associerat med söktexten.Kör följande kommando i kommandotolken:
vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage
Tips
För Developer PowerShell är startkatalogen för gränssnittet Visual Studio Project Location. Ersätt MyTestAssembly.dll med sökvägen och testfilens namn. Mer information finns i VSTest.Console.exe kommandoradsalternativ.
Felsöka
Om du inte ser resultat av kodtäckning kan artikeln Felsöka kodtäckning hjälpa dig.