Freigeben über


Anpassen der Codeabdeckungsanalyse

Standardmäßig analysiert das Visual Studio 2012-Code-Abdeckungstool alle Projektmappenassemblys (.exe/.dll) die während der Komponententests geladen werden.Es wird empfohlen, dass Sie diese Standardeinstellung beibehalten, da es gut funktioniert.Weitere Informationen finden Sie unter Bestimmen des Umfangs des zu testenden Codes mithilfe von Codeabdeckung.

Bevor Sie das Codeabdeckungsverhalten anpassen, sollten Sie mehrere Alternativen:

  • Ich möchte den Testcode von Codeabdeckungsergebnisse ausschließen und nur den Anwendungscode einschließen.

    Fügen Sie ExcludeFromCodeCoverage Attribute der Testklasse hinzu.

  • Ich möchte Assemblys einschließen, die nicht Teil Meine Projektmappe sind.

    Rufen Sie die PDB-Dateien für diese Assemblys und kopieren Sie sie im gleichen Ordner wie die Dateien der Assembly .dll.

Um das Codeabdeckungsverhalten anzupassen, kopieren Sie Beispiel am Ende dieses Themas und fügen es der Projektmappe mit der Dateierweiterung .runsettings hinzu.Bearbeiten Sie ihn zu Ihren eigenen Anforderungen und dann im Menü Test auswählen, Testeinstellungen, Datei Datei für Testeinstellungen auswählen.Der Rest dieses Themas werden diese Schritte ausführlicher beschrieben.

Die .runsettings-Datei

Erweiterte Codeabdeckungseinstellungen werden in einer .runsettings-Datei angegeben.Dies ist die Konfigurationsdatei, die von Komponententesttools verwendet wird.Es wird empfohlen Beispiel am Ende dieses Themas Sie kopieren und bearbeitet werden, um Ihren eigenen Anforderungen entsprechen.

  • Was geschah zur .testsettings-Datei I verwendet in Visual Studio 2010?

    In Visual Studio 2010 gilt die .testsettings-Datei nur auf Komponententests auf dem MSTest-Framework zu.In Visual Studio 2012 gelten die Testtools nicht nur für MSTest, sondern auch andere Frameworks wie NUnit und xUnit zu.ein.Die .testsettings-Datei funktioniert nicht mit diesen.Die .runsettings-Datei wurde entworfen, um die Testtools so anzupassen, die mit allen Testframeworks funktioniert.

Um Codeabdeckung anzupassen, müssen Sie eine .runsettings-Datei der Projektmappe hinzufügen:

  1. Fügen Sie eine XML-Datei als Projektmappenelement mit der Erweiterung .runsettings hinzu:

    Wählen Sie im Projektmappen-Explorer, im Kontextmenü der Projektmappe, Hinzufügen, Neues Element aus und wählen XML-Datei aus.Speichern Sie die Datei mit einem Nameende wie CodeCoverage.runsettings

  2. Fügen Sie den Inhalt hinzu, der im Beispiel am Ende dieses Themas gegeben wird, und passen Sie ihn dann in den Anforderungen angezeigt, wie in den folgenden Abschnitten beschrieben.

  3. Klicken Sie im Menü Test wählen Sie Testeinstellungen, Datei für Testeinstellungen auswählen aus und die Datei aus.

  4. Jetzt, als Sie Test, Codeabdeckung analysieren ausführen, steuert diese .runsettings Datei sein Verhalten.

  5. Um die benutzerdefinierten Einstellungen mit Timeouts drehen, die Datei in Test, Menü Testeinstellungen nicht deaktivieren oder auswählen.

Testeinstellungsmenü mit benutzerdefinierter Einstellungsdatei

Andere Aspekte von Komponententests können in der gleichen .runsettings-Datei konfiguriert werden.Weitere Informationen finden Sie unter Überprüfen von Code mithilfe von Komponententests.

JJ159530.collapse_all(de-de,VS.110).gifAngeben von Symbolsuchpfaden

Codeabdeckung erfordert Symbole (PDB-Dateien) für Assemblys vorhanden sind.Für die Assemblys, die von der Lösung erstellt werden, sind im Allgemeinen Symboldateien neben den Binärdateien vorhanden, und Codeabdeckung funktioniert automatisch.Aber in einigen Fällen, sollten Sie Assemblys, auf die verwiesen wird, in der Codeabdeckungsanalyse einschließen.In solchen Fällen können die PDB-Dateien nicht neben den Binärdateien, aber Sie können den Symbolsuchpfad in der .runsettings-Datei angeben.

         <SymbolSearchPaths>              
               <Path>\\mybuildshare\builds\ProjectX</Path>
               <!--More paths if required-->
         </SymbolSearchPaths>
WarnhinweisVorsicht

Symbolauflösung kann Zeit erhalten, besonders wenn sie einen Remotedateispeicherort mit vielen Assemblys verwendet.Daher sollten Sie, Remote-IIS PDB-Dateien auf denselben lokalen Speicherort wie die binären (DLL- und EXE-Dateien) Dateien zu kopieren.

JJ159530.collapse_all(de-de,VS.110).gifAusschließen und Einschließen

Sie können angegebene Assemblys von der Codeabdeckungsanalyse ausschließen.Beispiel:

<ModulePaths>
  <Exclude>
   <ModulePath>Fabrikam.Math.UnitTest.dll</ModulePath>
   <!-- Add more ModulePath nodes here. -->
  </Exclude>
</ModulePaths>

Alternativ können Sie angeben, welche Assemblys enthalten sein sollen.Dieser Ansatz hat den Nachteil, der, wenn mehr Assemblys der Projektmappe hinzufügen, erinnern, müssen Sie sie der Liste hinzuzufügen:

<ModulePaths>
  <Include>
   <ModulePath>Fabrikam.Math.dll</ModulePath>
   <!-- Add more ModulePath nodes here. -->
  </Include>
</ModulePaths>

Wenn <Include> leer ist, dann umfasst das Codeabdeckungsverarbeiten alle Assemblys (DLL- und EXE-Dateien) das geladen werden, und für welche .pdb Dateien gefunden werden können, nur Elemente, die eine - Klausel in einer <Exclude> Liste übereinstimmen.

Include wird vor Exclude verarbeitet.

JJ159530.collapse_all(de-de,VS.110).gifReguläre Ausdrücke

Schließen Sie ein und schließen Sie reguläre Ausdrücke der Knotenverwendung aus.Weitere Informationen finden Sie unter Verwenden von regulären Ausdrücken in Visual Studio.Reguläre Ausdrücke sind nicht identisch als Platzhalter.insbesondere:

  1. . * entspricht einer Zeichenfolge aller Zeichen ab

  2. \. entspricht einen Punkt "") ab.

  3. (\ \) Abgleichungsklammern "()"

  4. \ \ entspricht Dateipfadtrennzeichen" \" ab

  5. ^ entspricht den Anfang der Zeichenfolge ab

  6. $ entspricht das Ende der Zeichenfolge ab

Alle Übereinstimmungen wird die Groß-/Kleinschreibung nicht beachtet.

Beispiel:

<ModulePaths>
  <Include>
    <!-- Include all loaded .dll assemblies (but not .exe assemblies): -->
    <ModulePath>.*\.dll$</ModulePath>
  </Include>
  <Exclude>
    <!-- But exclude some assemblies: -->
    <ModulePath>.*\\Fabrikam\.MyTests1\.dll$</ModulePath>
    <!-- Exclude all file paths that contain "Temp": -->
    <ModulePath>.*Temp.*</ModulePath> 
  </Exclude>
</ModulePaths>
WarnhinweisVorsicht

Wenn ein Fehler in einem regulären Ausdruck, wie ein ohne Escapezeichen und Klammer ohne Übereinstimmung gibt, wird Codeabdeckungsanalyse nicht ausgeführt.

JJ159530.collapse_all(de-de,VS.110).gifAndere Möglichkeiten, Elemente auszuschließen oder

Siehe Beispiel am Ende dieses Themas für Beispiele.

  • ModulePath - Assemblys angegebenen durch Assemblydateipfad.

  • CompanyName - Abgleichungsassemblys durch das Unternehmensattribut.

  • PublicKeyToken - Assemblys der Übereinstimmungen mit Vorzeichen durch das öffentliche Schlüsseltoken.Beispielsweise alle Visual Studio-Komponenten und Erweiterungen übereinstimmen, Verwendung <PublicKeyToken>^B03F5F7F11D50A3A$</PublicKeyToken>.

  • Source - Abgleichungselemente durch den Pfadnamen der Quelldatei, in der sie definiert sind.

  • Attribute - Abgleichungselemente, zu denen ein bestimmtes Attribut verknüpft ist.Geben Sie den vollständigen Namen des Attributs, einschließlich "Attribut" am Ende des Namens an.

  • Function - Abgleichungsprozeduren, Funktionen oder Methoden durch vollqualifizierten Namen.

Vergleich eines Funktionsnamens

ein regulärer Ausdruck muss den vollqualifizierten Namen der Funktion, einschließlich Namespace, Klasse, Methodennamen und Parameterliste übereinstimmen.Beispiel:

  • C# oder Visual Basic: Fabrikam.Math.LocalMath.SquareRoot(double)

  • C++: Fabrikam::Math::LocalMath::SquareRoot(double)

<Functions>
  <Include>
    <!-- Include methods in the Fabrikam namespace: -->
    <Function>^Fabrikam\..*</Function>
    <!-- Include all methods named EqualTo: -->
    <Function>.*.\EqualTo\(.*</Function>
  </Include>
  <Exclude>
    <!-- Exclude methods in a class or namespace named UnitTest: -->
    <Function>.*\.UnitTest\..*</Function>
  </Exclude>
</Functions>

Erstellen .runsettings-Dateien beim Ausführen von Tests angibt

JJ159530.collapse_all(de-de,VS.110).gifSo runsettings in Visual Studio Test anpassen

Wählen Sie Test, TesteinstellungenDatei für Testeinstellungen auswählen aus, und wählen Sie die .runsettings-Datei aus.Die Datei wird im Testeinstellungsmenü, und Sie können sie auswählen oder abbrechen.Während es ausgewählt wird, wendet die .runsettings-Datei, wenn Sie Codeabdeckung analysieren verwenden.

JJ159530.collapse_all(de-de,VS.110).gifSo Testlaufeinstellungen in einem Befehlszeilentest anpassen

Um Tests von der Befehlszeile ausführen, verwenden Sie vstest.console.exe.Die Einstellungsdatei ist ein Parameter dieses Hilfsprogramms.Weitere Informationen finden Sie unter Verwenden von VSTest.Console über die Befehlszeile.

  1. Starten der Visual Studio-Entwickler-Eingabeaufforderung:

    Unter Windows Start, wählen Sie Alle Programme, Microsoft Visual Studio, Visual Studio Tools, Entwicklereingabeaufforderung aus.

  2. Ausführen:

    vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage /Settings:CodeCoverage.runsettings

JJ159530.collapse_all(de-de,VS.110).gifSo Testlaufeinstellungen in einer Builddefinition anpassen

Sie können Codeabdeckungsdaten aus einem Teambuild abrufen.

Festlegen von Testlaufeinstellungen in einer Builddefinition

  1. Stellen Sie sicher, dass die .runsettings-Datei eingecheckt wird.

  2. Öffnen Sie im Team Explorer Builds und fügen Sie dann eine Builddefinition hinzu oder bearbeiten Sie sie.

  3. Klicken Sie auf der Seite Prozess erweitern Sie Automatisierte Tests, Testquelle, Testlaufeinstellungen.Wählen Sie die .runsettings Datei aus.

    • Die Testassembly wird anstelle Testquelle.Wenn ich versuche, das Feld Testlaufeinstellungen festzulegen, kann ich .testsettings-Dateien nur auswählen.

      Die Automatisierte Tests wählen ausgewähltes Testassembly und [...] am Ende der Zeile aus.Im Dialogfeld Testlauf hinzufügen/bearbeiten legen Sie Test Runner zu Visual Studio Test Runner fest.

Die Ergebnisse sind im zusammenfassenden Abschnitt des Buildberichts sichtbar.

Datei des Beispiel .runsettings

Kopieren Sie diesen Code und bearbeiten Sie ihn, um Ihren eigenen Anforderungen entsprechen.Dies ist die Datei mit .runsettings.

<?xml version="1.0" encoding="utf-8"?>
<!-- File name extension must be .runsettings -->
<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
        <Configuration>
          <CodeCoverage>
<!--
Additional paths to search for .pdb (symbol) files. Symbols must be found for modules to be instrumented.
If .pdb files are in the same folder as the .dll or .exe files, they are automatically found. Otherwise, specify them here.
Note that searching for symbols increases code coverage runtime. So keep this small and local.
--> 
<!--           
            <SymbolSearchPaths>              
                   <Path>C:\Users\User\Documents\Visual Studio 2012\Projects\ProjectX\bin\Debug</Path>
                   <Path>\\mybuildshare\builds\ProjectX</Path>
            </SymbolSearchPaths>
-->

<!--
About include/exclude lists:
Empty "Include" clauses imply all; empty "Exclude" clauses imply none.
Each element in the list is a regular expression (ECMAScript syntax). See https://msdn.microsoft.com/library/2k3te2cs.aspx.
An item must first match at least one entry in the include list to be included.
Included items must then not match any entries in the exclude list to remain included.
-->

            <!-- Match assembly file paths: -->
            <ModulePaths>
              <Include>
                <ModulePath>.*\.dll$</ModulePath>
                <ModulePath>.*\.exe$</ModulePath>
              </Include>
              <Exclude>
                <ModulePath>.*CPPUnitTestFramework.*</ModulePath>
              </Exclude>
            </ModulePaths>

            <!-- Match fully qualified names of functions: -->
            <!-- (Use "\." to delimit namespaces in C# or Visual Basic, "::" in C++.)  -->
            <Functions>
              <Exclude>
                <Function>^Fabrikam\.UnitTest\..*</Function>         
                <Function>^std::.*</Function>
                <Function>^ATL::.*</Function>
                <Function>.*::__GetTestMethodInfo.*</Function>
                <Function>^Microsoft::VisualStudio::CppCodeCoverageFramework::.*</Function>
                <Function>^Microsoft::VisualStudio::CppUnitTestFramework::.*</Function>
              </Exclude>
            </Functions>

            <!-- Match attributes on any code element: -->
            <Attributes>
              <Exclude>
                <!-- Don’t forget "Attribute" at the end of the name -->
                <Attribute>^System.Diagnostics.DebuggerHiddenAttribute$</Attribute>
                <Attribute>^System.Diagnostics.DebuggerNonUserCodeAttribute$</Attribute>
                <Attribute>^System.Runtime.CompilerServices.CompilerGeneratedAttribute$</Attribute>
                <Attribute>^System.CodeDom.Compiler.GeneratedCodeAttribute$</Attribute>
                <Attribute>^System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute$</Attribute>
              </Exclude>
            </Attributes>

            <!-- Match the path of the source files in which each method is defined: -->
            <Sources>
              <Exclude>
                <Source>.*\\atlmfc\\.*</Source>
                <Source>.*\\vctools\\.*</Source>
                <Source>.*\\public\\sdk\\.*</Source>
                <Source>.*\\microsoft sdks\\.*</Source>
                <Source>.*\\vc\\include\\.*</Source>
              </Exclude>
            </Sources>

            <!-- Match the company name property in the assembly: -->
            <CompanyNames>
              <Exclude>
                <CompanyName>.*microsoft.*</CompanyName>
              </Exclude>
            </CompanyNames>

            <!-- Match the public key token of a signed assembly: -->
            <PublicKeyTokens>
              <!-- Exclude Visual Studio extensions: -->
              <Exclude>
                <PublicKeyToken>^B77A5C561934E089$</PublicKeyToken>
                <PublicKeyToken>^B03F5F7F11D50A3A$</PublicKeyToken>
                <PublicKeyToken>^31BF3856AD364E35$</PublicKeyToken>
                <PublicKeyToken>^89845DCD8080CC91$</PublicKeyToken>
                <PublicKeyToken>^71E9BCE111E9429C$</PublicKeyToken>
                <PublicKeyToken>^8F50407C4E9E73B6$</PublicKeyToken>
                <PublicKeyToken>^E361AF139669C375$</PublicKeyToken>
              </Exclude>
            </PublicKeyTokens>


            <!-- We recommend you do not change the following values: -->
            <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
            <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
            <CollectFromChildProcesses>True</CollectFromChildProcesses>
            <CollectAspDotNet>False</CollectAspDotNet>

          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

Siehe auch

Konzepte

Überprüfen von Code mithilfe von Komponententests

Weitere Ressourcen

Bestimmen des Umfangs des zu testenden Codes mithilfe von Codeabdeckung