Sdílet prostřednictvím


Je právě testován pomocí kódu disponibility zjistit, jak daleko kódu

Funkci pokrytí kódu systému Visual Studio lze použít ke zjištění toho, jaký podíl kódu projektu je skutečně testován kódovanými testy, jako jsou například jednotkové testy.Pro efektivní ochranu před chybami je vhodné testovat, neboli "pokrýt", velkou část kódu projektu.

Analýza kódu disponibility lze použít pro spravované (CLI) a nespravovaný kód (nativní).

Pokrytí kódu je jedna z možností při spouštění testů použitím Průzkumníka testů.Tabulka výsledků zobrazuje procento kódu, který byl spuštěn v každém sestavení, třídě a metodě.Editor zdrojového kódu navíc ukazuje samotný kód, který byl testován.

Kód disponibility výsledky s barvy

Požadavky

  • Visual Studio Ultimate, Visual Studio Premium

Analýza pokrytý kódu jednotkovými testy v Průzkumníku testů

  1. V nabídce Test zvolte položku Analyzovat pokrytí kódu.

  2. Pro zobrazení spuštěných řádků zvolte možnost Zobrazit ikonu barevné zvýrazňování syntaxe kódu disponibilityZobrazit barevné označení pokrytí kódu.

    Pro změnu barvy nebo použití tučného písma zvolte v nabídce Nástroje, položky Možnosti, Prostředí, Písma a barvy, Zobrazit nastavení pro: Textový editor.V položce Zobrazení položek nastavte položky Pokrytí.

  3. Pokud výsledky zobrazují nízké pokrytí, prozkoumejte části kódu, které nejsou testovány, a vytvořte pro ně další testy.Vývojové týmy obvykle usilují o 80% pokrytí kódu.V některých situacích je přijatelné i nižší pokrytí.Nižší pokrytí je například přijatelné tehdy, pokud je část kódu generovaná ze standardních šablon.

Tip

Pro získání přesných výsledků:

  • Ujistěte se, že je vypnuta optimalizace kompilátoru.

    Při práci s nespravovaným kódem (nativní), použijte ladicí sestavení.

  • Ujistěte se, že jsou generovány soubory s příponou .pdb (soubory symbolů) pro každého sestavení.

Pokud nezískáte očekávané výsledky, více informací naleznete v Poradce při potížích s pokrytím kódu.

Vykazování v blocích nebo řádcích

Pokrytí kódu je určováno po blocích.Blok je část kódu s právě jedním vstupním a výstupním bodem.Pokud tok řízení programu projde při testovacím běhu blokem, tento blok se započítá jako pokrytý.Počet průchodů blokem nemá na výsledek žádný vliv.

Je také možné výsledky zobrazit podle řádků zvolením položky Přidat nebo odebrat sloupce v záhlaví tabulky.Pokud testovací běh vykonal všechny bloky na jednom řádku kódu, započítá se tento řádek jako úplný řádek.Když řádek obsahuje jak otestované, tak i neotestované bloky, pak se započítá jako částečný řádek.

Někteří uživatelé dávají přednost určování pokrytí počtu řádků, protože jeho procenta lépe odpovídají velikosti fragmentů, které jsou vidět ve zdrojovém kódu.Dlouhý blok výpočtu by byl započítán jako jeden blok i v případě, že zabírá několik řádků.

Správa výsledků pokrytí kódu

Okno Výsledky pokrytí kódu obvykle zobrazuje výsledek posledního běhu.Výsledky se budou lišit, pokud dojde ke změně zkušebních dat nebo jsou pokaždé spuštěny jen některé testy.

Okno pokrytí kódu lze také použít ke zobrazení předchozích výsledků nebo výsledků získaných na jiných počítačích.

Je také možné sloučit výsledky několika běhů, pokud například používají jiná testovací data.

  • Pro zobrazení předchozí sady výsledků zvolte tuto sadu z rozevírací nabídky.Nabídka obsahuje dočasný seznam, který je po otevření nového řešení vyprázdněn.

  • Pro zobrazení výsledků z předchozí relace zvolte položku Importovat výsledky pokrytí kódu, přejděte do složky TestResults ve svém řešení a importujte soubor s příponou .coverage.

    Vybarvení pokrytí může být nesprávné v případě, že byl zdrojový kód změněn od chvíle vygenerování souboru s příponou .coverage.

  • Aby byly výsledky čitelné jako text, zvolte položku Exportovat výsledky pokrytí kódu.Tím se vytvoří soubor s příponou .coveragexml, který je možné zpravovat v jiných nástrojích nebo jednoduše zaslat e-mailem.

  • Pro odeslání výsledků někomu jinému odešlete buď soubor s příponou .coverage, nebo exportovaný soubor s příponou .coveragexml.Tyto soubory je pak možné importovat.Pokud se navíc shodují verze zdrojového kódu, je možné zobrazit i vybarvení pokrytí.

Sloučení výsledků různých běhů

V některých situacích se na základě testovacích dat použijí různé bloky kódu.Je tedy potřebné sloučit výsledky různých testovacích běhů.

Například při spuštění testu se vstupem "2" je zjištěno 50% pokrytí určité funkce.Při druhém spuštění testu se vstupem "-2" se v okně pokrytí zobrazí pokrytí zbylých 50 % funkce.Po sloučení výsledků těchto dvou testovacích běhů ukáže sestava i vybarvení 100% pokrytí funkce.

Pro docílení takového sloučení použijte položku Ikona pro sloučení tlačítka v okně Průchod kódemSloučení výsledků pokrytí kódu.Ke sloučení je možné použít libovolnou kombinaci předešlých běhů nebo importovaných výsledků.Pokud je potřeba sloučit exportované výsledky, je nejprve nutné je importovat.

K uložení sloučených výsledků použijte položku Exportovat výsledky pokrytí kódu.

Dd537628.collapse_all(cs-cz,VS.110).gifOmezení při slučování

  • Při sloučení dat pokrytí rozdílných verzí kódu jsou výsledky zobrazeny odděleně, ale nejsou sloučeny.Pro kompletní sloučení výsledků je potřeba použít stejné sestavení kódu pouze s odlišnými testovacími daty.

  • Pokud dojde ke sloučení souboru výsledků, který byl exportovány a importovány, je možné zobrazit výsledky jen podle řádků, nikoli podle bloků.Pro zobrazení dat podle řádků použijte položku Přidat nebo odebrat sloupce.

  • Při sloučení výsledků testů projektu aplikace ASP.NET dojde ke zobrazení výsledků samostatných testů, ale ne k jejich sloučení.To platí pouze pro samotné artefakty ASP.NET, výsledky ostatních sestavení budou sloučeny.

Vyloučení prvků z výsledků pokrytí kódu

Je možné vyloučit určité prvky v kódu z výpočtů pokrytí, například proto, že je kód generován z textové šablony.Přiřaďte atribut System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage libovolnému z následujících prvků kódu: třída, struktura, metoda, vlastnost, setter nebo getter vlastnosti, událost.Za povšimnutí stojí, že vyloučení třídy nevylučuje její odvozené třídy.

Příklad:

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 { ... }
Imports System.Diagnostics.CodeAnalysis


Class ExampleClass1        
    <ExcludeFromCodeCoverage()>
    Public Sub ExampleSub1()
        ...
    End Sub

    ' Exclude property
    < ExcludeFromCodeCoverage()>
    Property ExampleProperty1 As Integer
        ...
    End Property

    ' Exclude setter
    Property ExampleProperty2 As Integer
        Get
            ...
        End Get
        <ExcludeFromCodeCoverage()>
        Set(ByVal value As Integer)
            ...
        End Set
    End Property
End Class

<ExcludeFromCodeCoverage()>
Class ExampleClass2
...
End Class
// A .cpp file compiled as managed (CLI) code.
using namespace System::Diagnostics::CodeAnalysis;
...
public ref class ExampleClass1
{
  public:
    [ExcludeFromCodeCoverage]
    void ExampleFunction1() { ... }
    
    [ExcludeFromCodeCoverage]
    property int ExampleProperty2 {...}

    property int ExampleProperty2 {
      int get() { ... }
     [ExcludeFromCodeCoverage]
      void set(int value) { ...  }
   }

}

[ExcludeFromCodeCoverage]
public ref class ExampleClass2
{ ... }

Dd537628.collapse_all(cs-cz,VS.110).gifVyloučení prvků v nativním kódu jazyka C++

Pro vyloučení nespravovaných (nativních) prvků kódu jazyka C++:

#include <CodeCoverage\CodeCoverage.h>
...

// Exclusions must be compiled as unmanaged (native):
#pragma managed(push, off)

// Exclude a particular function:
ExcludeFromCodeCoverage(Exclusion1, L"MyNamespace::MyClass::MyFunction");

// Exclude all the functions in a particular class:
ExcludeFromCodeCoverage(Exclusion2, L"MyNamespace::MyClass2::*");

// Exclude all the functions generated from a particular template: 
ExcludeFromCodeCoverage(Exclusion3, L"*::MyFunction<*>"); 


// Exclude all the code from a particular .cpp file:
ExcludeSourceFromCodeCoverage(Exclusion4, L"*\\unittest1.cpp");

// After setting exclusions, restore the previous managed/unmanaged state:
#pragma managed(pop)

Použijte následující makra:

-
ExcludeFromCodeCoverage(ExclusionName, L"FunctionName");

ExcludeSourceFromCodeCoverage(ExclusionName, L"SourceFilePath");
  • ExclusionName je libovolný jedinečný název.

  • FunctionName je plně kvalifikovaný název funkce.Může obsahovat zástupné znaky.Například pro vyloučení všech funkcí třídy je možné napsat MyNamespace::MyClass::*

  • SourceFilePath je místní cesta nebo cesta UNC k souboru s příponou cpp.Může obsahovat zástupné znaky.Následující příklad vylučuje všechny soubory v určitém adresáři: \\MyComputer\Source\UnitTests\*.cpp

  • #include <CodeCoverage\CodeCoverage.h>

  • Volání maker pro vyloučení se umisťují do globálního oboru názvů není, ne do specifického oboru názvů ani třídy.

  • Vyloučení se umisťuje buď do souboru kódu jednotkového testu, nebo do souboru kódu aplikace.

  • Výjimky musí být kompilován jako nespravovaný kód (nativní), buď pomocí možnosti kompilátoru, nebo pomocí #pragma managed(off).

[!POZNÁMKA]

Chcete-li vyloučit funkce v C + +/ CLI kódu, použijte atribut [System::Diagnostics::CodeAnalysis::ExcludeFromCodeCoverage] funkce.Toto je stejné použití jako v jazyce C#.

Dd537628.collapse_all(cs-cz,VS.110).gifZahrnutí nebo vyloučení dalších prvků

Analýza pokrytí kódu je provedena pouze na sestavení, která jsou načtena a pro něž je k dispozici jejich soubor s příponou .pdb ve stejném adresáři jako jejich soubor s příponou .dll nebo .exe.Proto je v některých případech možné rozšířit sadu zahrnutých sestavení získáním kopie jejich souborů s příponou .pdb.

Je také možné získat větší kontrolu nad sadou sestavení a prvků vybraných pro analýzu pokrytí kódu pomocí vytvoření souboru .runsettings.Je tak například možné vyloučit určitá sestavení bez nutnosti přidávání atributů jejich třídám.Další informace naleznete v tématu Přizpůsobení analýzy pokrytí kódu.

Analýza pokrytí kódu ve službě sestavení

Při vrácení kódu se změnami jsou testy spuštěny na serveru sestavení společně s testy ostatních členů týmu.(Pokud jste toto chování ještě nenastavovali, více informací naleznete v Spustit testy v procesu sestavení.) Je užitečné analyzovat pokrytí kódu na službě sestavení, protože to poskytuje nejaktuálnější a nejsrozumitelnější obraz o pokrytí celého projektu.Takový postup bude také zahrnovat automatizované systémové testy, které nejsou obvykle spouštěny na počítačích vývojářů.

  1. V Průzkumníku týmových projektů otevřete Sestavení a poté přidejte nebo upravte definici sestavení.

  2. Na stránce Proces rozbalte položky Automatizované testy, Zdroj testu, Nastavení spuštění.Nastavte položku Soubor nastavení typu spuštění na hodnotu Pokrytí kódu povoleno.

    Pokud máte více než jednu definici Zdroje testu, opakujte tento krok pro každou z nich.

    • Pole s názvem Soubor nastavení typu spuštění ale není v nastavení zobrazeno.

      V části Automatické testy zvolte položku Sestavení testu a zvolte eliptické tlačítko [...] na konci řádku.V dialogovém okně Přidat/upravit testovací běh zvolte v položce Nástroj pro spuštění testu hodnotu Nástroj pro spuštění testu systému Visual Studio.

Definice sestavení pro průchod kódem

Když sestavení proběhne, jsou výsledků pokrytí kódu připojeny k testovacímu běhu a objeví se v přehledu sestavení.

Analýza pokrytí kódu v příkazovém řádku

Pro spuštění testů z příkazového řádku se používá příkaz vstest.console.exe.Pokrytí kódu je jednou z možností tohoto nástroje.Další informace naleznete v tématu Možnosti příkazového řádku VSTest.Console.exe.

  1. Spusťte Vývojářský příkazový řádek systému Visual Studio:

    V nabídce Start systému Windows zvolte položky Všechny programy, Microsoft Visual Studio, Nástroje systému Visual Studio, Vývojářský příkazový řádek.

  2. Spusťte:

    vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage

Poradce při potížích

Pokud nejsou zobrazeny výsledky pokrytí kódu, naleznete více informací v Poradce při potížích s pokrytím kódu.

Externí zdroje

Dd537628.collapse_all(cs-cz,VS.110).gifPokyny

Testování pro nepřetržité dodávky s Visual Studio 2012 – kapitola 2: testování: testování vnitřní

Viz také

Koncepty

Přizpůsobení analýzy pokrytí kódu

Poradce při potížích s pokrytím kódu

Ověření kódu pomocí zkoušky jednotky