Použijte pokrytí kódu k určení, kolik kódu je testováno
Pokud chcete zjistit, jaký podíl kódu vašeho projektu je testován kódovanými testy, jako jsou jednotkové testy, můžete použít funkci pokrytí kódu ve Visual Studio. Abyste se mohli efektivně chránit před chybami, měly by vaše testy testovat nebo "zahrnovat" velkou část vašeho kódu.
Analýza pokrytí kódu je možná pro spravovaný (CLR) i nespravovaný (nativní) kód. Podporují se statické i dynamické instrumentace. Pokud chcete použít pokrytí kódu ve scénářích příkazového řádku, použijte vstest.console.exe nebo nástroj Microsoft.CodeCoverage.Console, což je rozšíření pro dotnet-coverage, který podporuje také nativní kód.
Možnost pokrytí kódu je k dispozici v nabídce Test při spouštění metod testů pomocí Průzkumníka testů. Tabulka výsledků zobrazuje procento kódu spuštěného v jednotlivých sestaveních, třídách a procedurách. Zdrojový editor zvýrazní testovaný kód. Výsledky můžete exportovat v oblíbených formátech, jako je Cobertura.
Požadavky
Funkce pokrytí kódu je k dispozici pouze v edici Visual Studio Enterprise.
Poznámka
Pro pokrytí kódu .NET můžete alternativně použít nástroj příkazového řádku, dotnet-coverage.
Analýza pokrytí kódu
V nabídce Test vyberte Analyzovat pokrytí kódu pro všechny testy.
Spropitné
Pokrytí kódu můžete spustit také v nástrojovém okně Průzkumníka testů.
Poté, co již testy proběhly, vyberte Zobrazit zabarvení pokrytí kódu v okně Výsledky pokrytí kódu. Ve výchozím nastavení je kód pokrytý testy zvýrazněn světle modrým.
V rozevíracím seznamu pro možnost Zobrazit barvu pokrytí kódu můžete vybrat, jestli se barva vztahuje na řádky kódu, glyfy na levém okraji nebo obojí.
Pokud chcete změnit barvy nebo použít tučný obličej, zvolte Nástroje>Možnosti>Prostředí>Písma a barvy>Zobrazit nastavení pro: Textový editor. V části Zobrazit položkyupravte nastavení položek Pokrytí, například Oblast nepokrytá.
Pokud výsledky ukazují nízké pokrytí, prozkoumejte, které části kódu se nevyužívají, a napište další testy, které je pokryly. Vývojové týmy obvykle cílí na přibližně 80% pokrytí kódu. V některých situacích je nižší pokrytí přijatelné. Nižší pokrytí je například přijatelné, když se nějaký kód vygeneruje ze standardní šablony.
Spropitné
Jak optimalizovat pokrytí kódu:
- Vypněte optimalizaci kompilátoru.
- Pokud pracujete s nespravovaným (nativním) kódem, použijte ladicí sestavení.
- Pro každé sestavení vygenerujte soubory .pdb (symbol).
Pokud se vám nezobrazí očekávané výsledky, přečtěte si Řešení potíží s pokrytím kódu.
Po aktualizaci kódu nezapomeňte znovu spustit pokrytí kódu. Výsledky pokrytí a barvení kódu se po úpravě kódu nebo při spuštění testů automaticky neaktualizují.
Spropitné
Počínaje verzí 17.2 sady Visual Studio 2022 můžete povolit nejnovější funkce pokrytí kódu tak, že vyberete Tools > Options > Environment > Preview Features, pak vyberete Vylepšení pokrytí kódua restartujete Visual Studio.
Sestava v blocích nebo řádcích
Pokrytí kódu se počítá v blocích. Blok je součástí kódu s přesně jedním vstupním a výstupním bodem. Pokud tok řízení programu prochází blokem během testovacího běhu, počítá se tento blok jako zahrnutý. Počet použití bloku nemá vliv na výsledek.
Výsledky můžete zobrazit také pro řádky tím, že v záhlaví tabulky zvolíte Přidat/Odebrat sloupce. Někteří uživatelé dávají přednost počtu řádků, protože procenta odpovídají blíže velikosti fragmentů, které vidíte ve zdrojovém kódu. Dlouhý blok výpočtu se počítá jako jeden blok, i když zabírá mnoho řádků.
Spropitné
Řádek kódu může obsahovat více než jeden blok kódu. Pokud tomu tak je a testovací běh provede všechny bloky kódu na řádku, počítá se to jako jeden řádek. Pokud jsou některé, ale ne všechny bloky kódu na řádku provedeny, počítá se to jako částečný řádek.
Zobrazení výsledků pokrytí kódu
Okno výsledků pokrytí kódu obvykle strukturuje sestavu v hierarchii projektu, třídy a metody. Můžete to změnit tak, aby se zobrazilo pokrytí na úrovni adresáře, souboru nebo metody.
- Pokud chcete zobrazitzdrojové sestavy, vyberte ikonu Konfigurovat zobrazení pokrytí kódu v okně výsledky pokrytí kódu. Potom v rozevíracím seznamu Styl sestavy vyberte zobrazení zdroje.
Výsledky pokrytí kódu v okně obvykle zobrazují výsledek pro celé řešení. Výsledky lze filtrovat tak, aby zobrazovaly výsledky pouze pro soubory aktualizované v aktuální větvi.
- Chcete-li zobrazit reportsady změn, vyberte ikonu Konfigurovat zobrazení pokrytí kódu v okně Výsledky pokrytí kódu. Potom v rozevíracím seznamu Obsah sestavy vyberte Sestava sady změn. Aktualizujte aktivní úložiště a základní větev, proti kterým se má porovnávat, aby bylo možné poskytnout sestavu porovnání.
Z vyhledávacího pole v okně Výsledky pokrytí kódu existuje několik způsobů filtrování této sestavy.
- Pokud chcete Hledat podle názvu (Zobrazit pouze ty, které odpovídají vyhledávacímu řetězci v okně), zadejte do vyhledávacího pole hledaný řetězec.
- Chcete-li Filtrovat podle typu zadejte název typu do vyhledávacího pole.
- Chcete-li Zobrazit všechny zrušte zaškrtnutí vyhledávacího pole.
- Pokud chcete Zobrazit 100% plně pokrytých, do vyhledávacího pole zadejte "Pokryto (%Lines)":"100".
- Chcete-li Zobrazit (>0% && < 100%) částečně pokryté, zadejte "Částečně pokryto (%Lines)":"<##" nahraďte ## procentem pokrytým.
- Chcete-li zobrazit 0%, které nejsou pokryté, zadejte do vyhledávacího pole "Nenalezeno (%Lines)":"0".
Správa výsledků pokrytí kódu
Okno Výsledky pokrytí kódu obvykle zobrazuje výsledek posledního spuštění. Výsledky se budou lišit, pokud změníte testovací data nebo když pokaždé spustíte jenom některé testy.
Okno s výsledky pokrytí kódu lze také použít k zobrazení předchozích výsledků nebo výsledků získaných na jiných počítačích.
Výsledky několika spuštění můžete sloučit, například ze spuštění, která používají různá testovací data.
Chcete-li zobrazit předchozí sadu výsledků, vyberte ji z rozevírací nabídky. V nabídce se zobrazí dočasný seznam, který se vymaže při otevření nového řešení.
Pro zobrazení výsledků z předchozí relacezvolte Importovat výsledky, přejděte do složky TestResults ve vašem řešení a importujte soubor .coverage.
Pokrytí barev může být nesprávné, pokud se zdrojový kód od doby, kdy byl soubor .coverage vygenerován, změnil.
Chcete-li, aby výsledky byly čitelné jako textové, zvolte Exportovat výsledky, vyberte .xml jako Uložit jako typ. Tím se vygeneruje čitelný .xml soubor, který můžete zpracovat pomocí jiných nástrojů nebo snadno odeslat e-mailem. Můžete také vybrat formáty exportu, jako je Cobertura.
Pokud chcete odeslat výsledky někomu jinému, pošlete soubor .coverage nebo exportovaný soubor .xml. Pak můžou soubor naimportovat. Pokud mají stejnou verzi zdrojového kódu, můžou vidět barvy pokrytí.
Sloučení výsledků z různých spuštění
V některých situacích se v závislosti na testovacích datech použijí různé bloky v kódu. Proto můžete chtít zkombinovat výsledky z různých testovacích běhů.
Předpokládejme například, že když spustíte test se vstupem "2", zjistíte, že je pokryto 50% konkrétní funkce. Když test spustíte podruhé se vstupem "-2", uvidíte v zobrazení barev pokrytí, že ostatní 50% funkce je pokryto. Teď sloučíte výsledky ze dvou testovacích běhů a zobrazení barevného obarvení sestavy a pokrytí ukazuje, že 100% funkce bylo pokryto.
Použijte ikonu pro sloučení výsledků. Můžete zvolit libovolnou kombinaci nedávných běhů nebo importovaných výsledků. Pokud chcete zkombinovat exportované výsledky, musíte je nejdřív importovat.
K uložení výsledků operace sloučení použijte Export výsledků.
Omezení při slučování
Pokud sloučíte data pokrytí z různých verzí kódu, výsledky se zobrazí samostatně, ale nezkombinují se. Pokud chcete získat plně kombinované výsledky, použijte stejný build kódu a změňte pouze testovací data.
Pokud sloučíte soubor výsledků, který byl exportován a importován, můžete výsledky zobrazit pouze podle řádků, nikoli podle bloků. Pomocí příkazu Přidat nebo odebrat sloupce zobrazte řádková data.
Pokud sloučíte výsledky z testů ASP.NET projektu, zobrazí se výsledky samostatných testů, ale nebudou sloučeny. Toto chování se vztahuje pouze na samotné artefakty ASP.NET: výsledky pro všechna ostatní sestavení budou zkombinovány.
Vyloučení prvků z výsledků pokrytí kódu
Můžete chtít vyloučit konkrétní prvky v kódu ze skóre pokrytí, například pokud je kód vygenerován z textové šablony. Přidejte atribut System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute do některého z následujících prvků kódu: třída, struktura, metoda, vlastnost, setter nebo getter, event.
Spropitné
Vyloučení třídy nevyloučí odvozené třídy.
Například:
- jazyka C# jazyka C#
- VB
- jazyka C++
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 { ... }
Použijte následující makra:
ExcludeFromCodeCoverage(
ExclusionName, L"
FunctionName");
ExcludeSourceFromCodeCoverage(
ExclusionName, L"
SourceFilePath");
ExclusionName je jakékoli jedinečné jméno.
FunctionName je plně kvalifikovaný název funkce. Může obsahovat zástupné cardy. Pokud chcete například vyloučit všechny funkce třídy, napište
MyNamespace::MyClass::*
SourceFilePath je místní cesta nebo cesta UNC souboru ve formátu .cpp. Může obsahovat zástupné cardy. Následující příklad vylučuje všechny soubory v určitém adresáři:
\\MyComputer\Source\UnitTests\*.cpp
#include <CodeCoverage\CodeCoverage.h>
Umístěte volání vylučovacích maker do globálního oboru názvů, a nikoliv do žádného jiného oboru názvů ani třídy.
Vyloučení můžete umístit buď do souboru kódu testu jednotek, nebo do souboru kódu aplikace.
Vyloučení musí být zkompilována jako nespravovaný (nativní) kód, a to buď nastavením možnosti kompilátoru, nebo pomocí
#pragma managed(off)
.
Poznámka
Pokud chcete vyloučit funkce v kódu C++/CLI, použijte u této funkce atribut [System::Diagnostics::CodeAnalysis::ExcludeFromCodeCoverage]
. To je stejné jako u jazyka C#.
Zahrnutí nebo vyloučení dalších prvků
Analýza pokrytí kódu se provádí pouze na sestaveních, která jsou načtena a pro která je soubor .pdb k dispozici ve stejném adresáři jako .dll nebo .exe soubor. Proto v některých případech můžete rozšířit sadu sestavení, která jsou zahrnuta získáním kopií příslušných .pdb souborů.
Pomocí souboru .runsettings můžete provést větší kontrolu nad tím, která sestavení a prvky jsou vybrány pro analýzu pokrytí kódu. Například můžete vyloučit soubory konkrétních druhů, aniž byste museli do jejich tříd přidávat atributy. Další informace naleznete v tématu Přizpůsobení analýzy pokrytí kódu.
Analýza pokrytí kódu v Azure Pipelines
Když kód zkontrolujete, testy se spustí na buildovém serveru spolu s testy od ostatních členů týmu. Je užitečné analyzovat pokrytí kódu v Azure Pipelines, abyste získali nejvíce up-todata a komplexního přehledu pokrytí v celém projektu. Pokrytí kódu ve službě Azure Pipelines zahrnuje také automatizované systémové testy a další kódované testy, které obvykle neběží na vývojových počítačích.
Analýza pokrytí kódu z příkazového řádku
Ke spuštění testů z příkazového řádku použijte nástroj vstest.console.exe. Pokrytí kódu je volbou nástroje vstest.console.exe vyvolanou volbou /EnableCodeCoverage
.
Spusťte příkazový řádek pro vývojáře pro Visual Studio:
V nabídce Start Windows vyhledejte
Developer Command Prompt for VS
a vyberte výsledek aplikace, který je přidružený k hledanému textu.Na příkazovém řádku spusťte následující příkaz:
vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage
Spropitné
Pro vývojáře PowerShell je počátečním adresářem prostředí umístění projektu sady Visual Studio. Nahraďte MyTestAssembly.dll cestou a názvem testovacího souboru. Další informace naleznete v možnostech příkazového řádku VSTest.Console.exe.
Řešení potíží
Pokud nevidíte výsledky pokrytí kódu, může vám pomoct článek Řešení potíží s pokrytím kódu.