Bestimmen des Umfangs des zu testenden Codes mithilfe von Codeabdeckung
Wenn Sie den Anteil des Projektcodes tatsächlich durch codierte Tests wie Komponententests getestet wird, können Sie die Codeabdeckungsfunktion von Visual Studio.Um für Fehler effektiv zu schützen, sollten die Tests trainieren Sie" oder "enthalten eine große Menge von Code.
Codeabdeckungsanalyse kann auf verwalteten CLI () und nicht verwaltetem Code (systemeigen) angewendet werden.
Codeabdeckung ist eine Option, wenn Sie Testmethoden mithilfe des Test-Explorers ausführen.Die Ergebnistabelle zeigt den Prozentsatz des Codes an, in der jede Assembly, Klassen- und Methode ausgeführt wurde.Darüber hinaus zeigt der Quellcode-Editor erläutert, welcher Code getestet wurde.
Anforderungen
- Visual Studio Ultimate, Visual Studio Premium
So Codeabdeckung in Komponententests im Test-Explorer analysieren
Klicken Sie im Menü Test wählen Sie Codeabdeckung analysieren aus.
Um zu sehen welche Zeilen ausgeführt wurden, wählen Sie Codeabdeckungsfärbung anzeigen.
Um die Farben ändern, oder Fettdruck zu verwenden, wählen Sie Tools, Optionen, Umgebung, Schriftarten und Farben, Show settings for: Text-Editor.Die Elemente anzeigen passen Sie die Abdeckungselemente.
Wenn die Ergebnisse niedrige Abdeckung anzeigen, forschen Sie nach, welche Teile des Codes nicht ausgeführt werden, und schreiben Sie weitere Tests, um sie zu enthalten.Entwicklungsteams streben normalerweise ca. 80% Codeabdeckung an.In einigen Situationen ist niedrigere Abdeckung zulässig.Beispielsweise ist niedrigere Abdeckung akzeptabel, wobei entweder Code aus einer Standardvorlage generiert wird.
Tipp |
---|
Für genaue Ergebnisse abrufen:
Wenn Sie nicht die Ergebnisse erhalten, die Sie erwarten, finden Sie unter Problembehandlung bei der Codeabdeckung. |
Berichten in Blöcken oder in Zeilen
Codeabdeckung wird in Blöcken gezählt.Ein Block ist ein Codeelement mit genau einer Ein- und Ausgangs-Einsprungadresse.Wenn die Ablaufsteuerungsübergaben des Programms durch einen Block während eines Testlaufs, dieser Block als abgedeckt gezählt wird.Die Häufigkeit, die der Block verwendet wird, hat keinen Einfluss auf das Ergebnis.
Sie können die Ergebnisse auch haben, die im Hinblick auf Zeilen angezeigt werden, indem Sie Spalten hinzufügen/entfernen im Tabellenüberschriften auswählen.Wenn der Testlauf alle Codeblöcke in einer Codezeile werden, wird sie wie eine Zeile gezählt.Wenn eine Zeile mehrere Codeblöcke, die ausgeführt wurden und einigen enthält, der nicht waren, der als eine Teilzeile gezählt wird.
Einige Benutzer bevorzugen eine Anzahl Zeilen, da die Prozentsätze genauer zur Größe der Fragmente entsprechen, die Sie im Quellcode finden.Ein langer Block Berechnung wird als ein einzelner Block betrachtet werden, auch wenn er viele Zeilen einnimmt.
Verwalten von Codeabdeckungsergebnisse
Im Fenster Codeabdeckungsergebnisse werden normalerweise das Ergebnis der letzten Ausführung an.Die Ergebnisse ändern sich, wenn die Testdaten ändern oder wenn Sie nur einige der Tests jedes Mal ausführen.
Das Codeabdeckungsfenster kann auch verwendet werden, um frühere Ergebnisse anzuzeigen, oder Ergebnisse abgerufen auf anderen Computern.
Sie können die Ergebnisse mehrerer Ausführungen, zum Beispiel von den Testläufen zusammenführen, die verschiedene Testdaten verwenden.
So fügen Sie einen vorherigen Resultset anzeigen, wählen ihn aus dem Dropdownmenü aus.Das Menü wird eine temporäre Liste an, die gelöscht wird, wenn Sie eine neue Projektmappe öffnen.
So fügen Sie Ergebnisse aus einer vorherigen Sitzung anzeigen, wählen Codeabdeckungsergebnisse importieren aus, navigieren Sie zum Ordner TestResults in der Lösung und COVERAGE-Dateien importieren.
Der Abdeckungsfarbton ist möglicherweise falsch, wenn der Quellcode geändert hat, seit die COVERAGE-Datei generiert wurde.
Um Ergebnisse lesbar wird als Text, wählen Codeabdeckungsergebnisse exportieren aus.Dies generiert eine lesbare .coveragexml-Datei, die Sie mit anderen Tools verarbeiten oder per E-Mail leicht senden können.
Um Ergebnisse zu einer anderen Person senden senden, entweder einer COVERAGE-Datei oder eine exportierte .coveragexml-Datei.Sie können die Datei importieren.Wenn sie dieselbe Version des Quellcodes haben, können sie Abdeckungsfarbton finden.
Das Zusammenführen resultiert aus verschiedenen Ausführungen
In einigen Situationen werden verschiedene Blöcke im Code abhängig von den Testdaten verwendet.Daher sollten Sie die Ergebnisse von verschiedenen Testläufe kombinieren.
Angenommen, wenn Sie einen Test mit Eingabe "2 " ausführen, Sie suchen, dass 50% einer bestimmten Funktion behandelt wird.Wenn Sie den Test ein zweites Mal mit der Eingabe ausführen "- 2 " finden Sie in der Abdeckungsfarbtonansicht, dass das andere 50% der Funktion behandelt wird.Führen Sie nun die Ergebnisse aus den zwei Testläufen und die Berichts- und Abdeckungsfarbtonansichtsshow zusammen, dass 100% der Funktion ausgeführt wurden.
Verwendung Codeabdeckungsergebnisse zusammenführen, hierzu.Sie können jede Kombination von neuen Ausführungen oder importierter Ergebnissen auswählen.Wenn Sie exportierte Ergebnisse kombinieren möchten, müssen Sie diese zuerst importieren.
Verwenden Sie Codeabdeckungsergebnisse exportieren, um die Ergebnisse einer Zusammenführung zu speichern.
Einschränkungen beim Zusammenführen
Wenn Sie Abdeckungsdaten aus unterschiedlichen Versionen des Codes zusammenführen, werden die Ergebnisse separat dargestellt, jedoch nicht kombiniert.So abzurufen kombinierte vollständig Ergebnisse, verwenden denselben Build des Codes und ändert nur die Testdaten.
Wenn Sie eine Ergebnisdatei zusammenführen, die exportiert wurde und dann importiert wurden, können Sie die Ergebnisse nach Zeilen, nicht von Blöcke nur anzeigen.Verwenden Sie den Befehl Spalten hinzufügen/entfernen, die Zeilendaten anzuzeigen.
Wenn Sie Ergebnisse zusammenführen, werden von Tests von ASP.NET, werden die Ergebnisse für die separaten Tests angezeigt, aber nicht kombiniert.Dies gilt nur für die ASP.NET-Artefakte selbst zu: Ergebnisse für alle anderen Assemblys werden kombiniert.
Ausschließen von Elementen aus Codeabdeckungsergebnisse
Sie sollten bestimmte Elemente im Code von den Abdeckungsergebnissen ausschließen, wenn der Code aus einer Textvorlage generiert wird.Fügen Sie das - Attribut System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage jedem der folgenden Codeelemente hinzu: Klasse, Struktur, Methode, Eigenschaft, Eigenschaftensetter oder Getter, Ereignis.Beachten Sie das ausschließlich einer Klasse ausschließt nicht die abgeleiteten Klassen.
Beispiel:
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
{ ... }
Ausschließen von Elementen im systemeigenem C++-Code
So nicht verwalteten (systemeigenen) Elemente in C++-Code ausschließen:
#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)
Verwenden Sie die folgenden Makros:
-
ExcludeFromCodeCoverage(ExclusionName, L"FunctionName");
ExcludeSourceFromCodeCoverage(ExclusionName, L"SourceFilePath");
ExclusionName ist jeder eindeutige Name.
FunctionName ist ein vollqualifizierter Funktionsname.Sie enthält möglicherweise Platzhalter.Um beispielsweise alle Features einer Klasse auszuschließen, schreiben Sie MyNamespace::MyClass::*
SourceFilePath ist die lokale Variable oder UNC-Pfad einer CPP-Datei.Sie enthält möglicherweise Platzhalter.Im folgenden Beispiel schließt alle Dateien in einem Verzeichnis aus: \\MyComputer\Source\UnitTests\*.cpp
#include <CodeCoverage\CodeCoverage.h>
Fügen Sie zu den Ausschlussmakros im globalen Namespace, nicht innerhalb eines Namespace oder Klasse.
Sie können die Ausschlüsse entweder in der Komponententestcodedatei oder in der Anwendungscodedatei platzieren.
Die Ausschlüsse müssen als nicht verwalteter (systemeigen) Code kompiliert werden, entweder, durch Festlegen der Compileroption festgelegt oder indem #pragma managed(off) verwendet.
Hinweis |
---|
Um Funktionen in C++/CLI auszuschließen Code, wenden Sie das - Attribut [System::Diagnostics::CodeAnalysis::ExcludeFromCodeCoverage] für die Funktion.Dies entspricht für C#. |
Zusätzliche Elemente einschließen oder ausschließend
Codeabdeckungsanalyse wird nur auf Assemblys ausgeführt, die geladen und, für eine PDB-Datei im gleichen Verzeichnis wie das DLL- oder EXE-Datei verfügbar ist.Daher unter bestimmten Umständen, können Sie den Satz von Assemblys erweitern, der eingeschlossen wird, indem Sie Kopien der entsprechenden PDB-Dateien abruft.
Sie können mehr über dem Steuerelement testen, Assemblys und Elemente für Codeabdeckungsanalyse ausgewählt werden, indem eine .runsettings-Datei schreibt.Beispielsweise können Sie der Assembly mit bestimmten Arten ausschließen, ohne zu müssen, Attribute ihren Klassen hinzuzufügen.Weitere Informationen finden Sie unter Anpassen der Codeabdeckungsanalyse.
Analysieren von Codeabdeckung im Builddienst
Wenn Sie in den Code überprüfen, werden die Tests auf dem Buildserver, zusammen mit allen anderen Tests von anderen Teammitgliedern ausgeführt.(Wenn Sie nicht bereits dieses aufgestellt haben, finden Sie unter Ausführen von Testläufen im Buildprozess.) Es ist nützlich, die Codeabdeckung für den Builddienst zu analysieren, da das das aktuellste und umfassendsten Bild der Codeabdeckung im gesamte gibt.Sie enthält auch automatisierte Systemtests und andere codierte Tests ein, die normalerweise nicht auf die Entwicklungscomputer ausführen.
Öffnen Sie im Team Explorer Builds und fügen Sie dann eine Builddefinition hinzu oder bearbeiten Sie sie.
Klicken Sie auf der Seite Prozess erweitern Sie Automatisierte Tests, Testquelle, Testlaufeinstellungen.Legen Sie Typ der Testlaufeinstellungen-Datei zu Codeabdeckung aktiviert fest.
Wenn Sie mehr als eine Test-Quelldefinition haben, wiederholen Sie diesen Schritt für jedes.
Es gibt kein Feld, das Typ der Testlaufeinstellungen-Datei genannt wird.
Die Automatisierte Tests wählen ausgewähltes Testassembly und die Schaltfläche mit den Auslassungspunkten [...] am Ende der Zeile aus.Testlauf hinzufügen/bearbeiten im Dialogfeld unter Test Runner, wählen Sie Visual Studio Test Runner aus.
Nachdem der Build ausgeführt wird, werden die Codeabdeckungsergebnisse dem Testlauf angefügt und werden in der Buildzusammenfassung.
Analysieren der Codeabdeckung in einer Befehlszeile
Um Tests von der Befehlszeile ausführen, verwenden Sie vstest.console.exe.Codeabdeckung ist eine Option dieses Hilfsprogramms.Weitere Informationen finden Sie unter Befehlszeilenoptionen für VSTest.Console.exe.
Starten der Visual Studio-Entwickler-Eingabeaufforderung:
Klicken Sie im Menü von Start wählen Sie Alle Programme, Microsoft Visual Studio, Visual Studio Tools, Entwicklereingabeaufforderung aus.
Ausführen:
vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage
Problembehandlung
Wenn Sie nicht Codeabdeckungsergebnisse finden, finden Sie unter Problembehandlung bei der Codeabdeckung.
Externe Ressourcen
Empfehlungen
Siehe auch
Konzepte
Anpassen der Codeabdeckungsanalyse