Freigeben über


Problembehandlung bei der Code Coverage

Gilt für: Visual Studio

Mit dem Tool zur Code Coverage-Analyse in Visual Studio werden Daten für native und verwaltete Assemblys (DLL- oder EXE-Dateien) erfasst. In einigen Fällen zeigt das Fenster "Codeabdeckungsergebnisse " jedoch einen Fehler wie "Leere Ergebnisse generiert: ...." an. Dieser Artikel hilft Ihnen bei der Problembehandlung und Behebung der verschiedenen Gründe, warum leere Ergebnisse auftreten können.

Was sollten Sie sehen?

Wenn Sie im Menü Test den Befehl Code Coverage analysieren auswählen, und der Buildvorgang sowie die Tests erfolgreich ausgeführt werden, sollte im Fenster Code Coverage eine Ergebnisliste angezeigt werden. Sie müssen möglicherweise die Elemente erweitern, um die Details anzuzeigen.

Screenshot mit Codeabdeckungsergebnissen mit Farbgebung.

Weitere Informationen finden Sie unter Bestimmen des Umfangs des zu testenden Codes mithilfe von Code Coverage.

Mögliche Gründe dafür, dass keine oder alte Ergebnisse angezeigt werden

Sie verwenden nicht die richtige Edition von Visual Studio.

Sie benötigen Visual Studio Enterprise.

Es wurden keine Tests ausgeführt.

Analyse

Überprüfen Sie das Ausgabefenster. Wählen Sie in der Dropdownliste Ausgabe anzeigen von die Option Tests aus. Überprüfen Sie, ob Warnungen oder Fehler protokolliert wurden.

Erklärung

Die Codeabdeckungsanalyse wird während der Tests ausgeführt. Sie schließt nur Assemblys ein, die während der Tests in den Arbeitsspeicher geladen werden. Wenn kein Test ausgeführt wird, gibt es nichts zur Code Coverage zu berichten.

Lösung

Wählen Sie im Test-Explorer " Alle ausführen" aus, um zu überprüfen, ob die Tests erfolgreich ausgeführt werden. Beheben Sie alle Fehler, bevor Sie Code Coverage analysieren verwenden.

Sie sehen sich ein vorheriges Ergebnis an.

Wenn Sie die Tests ändern und erneut ausführen, können das vorherige Code Coverage-Ergebnis und die Codefarbe der alten Ausführung noch sichtbar sein. Führen Sie die folgenden Schritte aus, um das Problem zu lösen:

  1. Führen Sie Code Coverage analysieren aus.
  2. Stellen Sie sicher, dass Sie das aktuelle Resultset im Fenster Code Coverage-Ergebnisse ausgewählt haben.

PDB-Dateien (Symboldateien) sind nicht verfügbar

Analyse

Öffnen Sie den Kompilierungszielordner (in der Regel bin\debug), und überprüfen Sie, ob für jede Assembly eine PDB-Datei im selben Verzeichnis wie die .dll - oder .exe-Datei vorhanden ist.

Erklärung

Das Codeabdeckungsmodul erfordert, dass für jede Assembly während der Testausführung die zugehörige PDB-Datei zugänglich ist. Wenn keine PDB-Datei für eine bestimmte Assembly vorhanden ist, wird die Assembly nicht analysiert.

Die PDB-Datei und die DLL- oder EXE-Datei müssen in dem gleichen Buildvorgang generiert werden.

Lösung

Stellen Sie sicher, dass die Buildeinstellungen die PDB-Datei generieren.

  • Wenn die PDB-Dateien beim Erstellen des Projekts nicht aktualisiert werden, öffnen Sie die Projekteigenschaften, wählen Sie die Seite "Erstellen " aus, wählen Sie "Erweitert" aus, und prüfen Sie Debuginformationen.

  • Öffnen Sie in Visual Studio 2022 und höheren Versionen für C#-Projekte für .NET Core oder .NET 5+ die Projekteigenschaften, wählen Sie die Registerkarte "Erstellen" aus, wählen Sie "Allgemein" aus, und prüfen Sie Debugsymbole.

  • Vergewissern Sie sich bei C++-Projekten, dass die generierten PDB-Dateien über vollständige Debuginformationen verfügen. Öffnen Sie die Projekteigenschaften, und überprüfen Sie, ob der Linker>Debuggen>Debuginformationen generieren auf Für Freigabe und Veröffentlichung optimierte Debuginformationen generieren (/DEBUG:FULL) festgelegt ist.

Wenn sich die PDB-Datei und die DLL- oder EXE-Dateien an verschiedenen Speicherorten befinden, kopieren Sie die PDB-Datei in dasselbe Verzeichnis. Es ist auch möglich, codeabdeckungsmodul so zu konfigurieren, dass nach PDB-Dateien an einem anderen Speicherort gesucht wird. Weitere Informationen finden Sie unter Anpassen der Code Coverage-Analyse.

Eine instrumentierte oder optimierte Binärdatei wird verwendet.

Analyse

Ermitteln Sie, ob die Binärdatei eine Form der erweiterten Optimierung wie profilgeführte Optimierung durchlaufen hat oder durch ein Profilerstellungstool wie vsinstr.exe oder vsperfmon.exe instrumentiert wurde.

Erklärung

Wenn eine Assembly bereits durch ein anderes Profilerstellungstool instrumentiert oder optimiert wurde, wird die Assembly bei der Codeabdeckungsanalyse nicht berücksichtigt. Die Code Coverage-Analyse kann für solche Assemblys nicht ausgeführt werden.

Lösung

Deaktivieren Sie die Optimierung, und verwenden Sie einen neuen Build.

Code wird nicht verwaltet (.NET) oder systemeigener Code (C++)

Analyse

Ermitteln Sie, ob Sie einige Tests für verwalteten oder C++-Code ausführen.

Erklärung

Die Codeabdeckungsanalyse in Visual Studio steht nur für verwalteten und systemeigenen Code (C++) zur Verfügung. Wenn Sie mit Tools von Drittanbietern arbeiten, wird ein Teil des Codes oder der gesamte Code möglicherweise auf einer anderen Plattform ausgeführt.

Lösung

Nicht verfügbar.

Der Projektname enthält „DataCollector“.

Projekte, die DataCollector im Projektnamen enthalten, werden durch die Code Coverage nicht identifiziert.

Assembly wurde durch NGen installiert

Analyse

Ermitteln Sie, ob die Assembly aus dem nativen Imagecache geladen wird.

Erklärung

Aus Leistungsgründen werden systemeigene Imageassemblys nicht analysiert. Weitere Informationen finden Sie unter Ngen.exe (Native Image Generator).

Lösung

Verwenden Sie eine MSIL-Version der Assembly. Verarbeiten Sie sie nicht mit NGen.

Die benutzerdefinierte Runsettings-Datei weist Syntaxprobleme auf.

Analyse

Wenn Sie eine benutzerdefinierte Runsettings-Datei verwenden, enthält sie möglicherweise einen Syntaxfehler. Die Codeabdeckung wird nicht ausgeführt, und entweder wird das Codeabdeckungsfenster am Ende der Testausführung nicht geöffnet, oder es werden alte Ergebnisse angezeigt.

Erklärung

Sie können Die Komponententests mit einer benutzerdefinierten RUNSETTINGS-Datei ausführen, um Codeabdeckungsoptionen zu konfigurieren. Mithilfe der Optionen können Sie Dateien einschließen oder ausschließen. Weitere Informationen finden Sie unter Anpassen der Code Coverage-Analyse.

Lösung

Es gibt zwei mögliche Fehlertypen:

  • XML-Fehler

    Öffnen Sie die RUNSETTINGS-Datei im XML-Editor von Visual Studio. Suchen Sie nach Fehlerhinweisen.

  • Fehler in regulärem Ausdruck

    Jede Zeichenfolge in der Datei ist ein regulärer Ausdruck. Überprüfen Sie jede auf Fehler, und suchen Sie insbesondere nach Folgendem:

    • Nicht übereinstimmende Klammern (...) oder nicht dargestellte Klammern \(...\). Wenn eine Klammer in der Suchzeichenfolge übereinstimmen soll, müssen Sie diese mit einem Escapezeichen versehen. Verwenden Sie beispielsweise zum Abgleichen einer Funktion: .*MyFunction\(double\)
    • Sternchen oder Pluszeichen am Anfang eines Ausdrucks. Verwenden Sie einen Punkt gefolgt von einem Sternchen, damit jede Zeichenfolge übereinstimmt: .*

Benutzerdefinierte Datei ".runsettings" mit falschen Ausschlüssen

Analyse

Wenn Sie eine benutzerdefinierte RUNSETTINGS-Datei verwenden, stellen Sie sicher, dass sie Die Assembly enthält.

Erklärung

Sie können Die Komponententests mit einer benutzerdefinierten RUNSETTINGS-Datei ausführen, um Codeabdeckungsoptionen zu konfigurieren. Mithilfe der Optionen können Sie Dateien einschließen oder ausschließen. Weitere Informationen finden Sie unter Anpassen der Code Coverage-Analyse.

Lösung

Entfernen Sie alle Include Knoten aus der RUNSETTINGS-Datei , und entfernen Sie dann alle Exclude Knoten. Wenn das Problem damit behoben ist, fügen Sie sie schrittweise wieder hinzu.

Stellen Sie sicher, dass im „DataCollectors“-Knoten die Code Coverage angegeben wird. Vergleichen Sie ihn mit dem Beispiel in Anpassen der Code Coverage-Analyse.

Einiger Code wird stets als nicht abgedeckt angezeigt

Initialisierungscode in systemeigenen DLLs wird vor der Instrumentation ausgeführt

Analyse

In statisch verknüpftem nativen Code wird ein Teil der Initialisierungsfunktion DllMain und Code, den sie aufruft, manchmal als nicht abgedeckt angezeigt, obwohl der Code ausgeführt wurde.

Erklärung

Das Code Coverage-Tool fügt kurz vor dem Start der Anwendung Instrumentation in eine Assembly ein. In jeder zuvor geladenen Assembly wird der Initialisierungscode in DllMain ausgeführt, sobald die Assembly geladen wird und vor dem Ausführen der Anwendung. Dieser Code scheint nicht abgedeckt zu werden. Dies gilt in der Regel für statisch geladene Assemblys.

Lösung

Keine.

References