Problembehandlung bei Der Code Coverage

              Gilt für: Visual Studio

Das Code Coverage-Analysetool in Visual Studio sammelt Daten für native und verwaltete Assemblys (.dll - oder .exe-Dateien ). In einigen Fällen wird im Fenster Code Coverage Results jedoch ein Fehler ähnlich wie "Leere Ergebnisse generiert: ...." angezeigt. Dieser Artikel hilft Ihnen bei der Problembehandlung und bei der 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 Build und die Tests erfolgreich ausgeführt werden, sollte im Code Coverage-Fenster eine Liste der Ergebnisse angezeigt werden. Möglicherweise müssen Sie die Elemente erweitern, um die Details anzuzeigen.

Screenshot: Code Coverage-Ergebnisse mit Farbgebung

Weitere Informationen finden Sie unter Verwenden von Code Coverage, um zu bestimmen, wie viel Code getestet wird.

Mögliche Gründe dafür, dass keine Ergebnisse 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 werden.

Erläuterung

Die Code coverage-Analyse wird während der Ausführung von Tests durchgeführt. Es enthält nur Assemblys, die beim Ausführen der Tests in den Arbeitsspeicher geladen werden. Wenn keiner der Tests ausgeführt wird, gibt es nichts für code coverage zu melden.

Lösung

Wählen Sie unter Test Explorer die Option 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 Ihre Tests ändern und erneut ausführen, kann weiterhin ein vorheriges Code Coverage-Ergebnis angezeigt werden, einschließlich der Codefarbe aus dieser alten Ausführung. Führen Sie die folgenden Schritte aus, um das Problem zu beheben:

  1. Führen Sie Analyze Code Coverage aus.
  2. Stellen Sie sicher, dass Sie im Fenster Code Coverage Results (Code Coverage-Ergebnisse ) das neueste Resultset 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.

Erläuterung

Die Code Coverage-Engine erfordert, dass jede Assembly über die zugehörige PDB-Datei verfügt, auf die während des Testlaufs zugegriffen werden kann. Wenn keine PDB-Datei für eine bestimmte Assembly vorhanden ist, wird die Assembly nicht analysiert.

Die PDB-Datei muss aus demselben Build wie die .dll - oder .exe-Dateien generiert werden.

Lösung

Stellen Sie sicher, dass Ihre 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 überprüfen Sie Debuginformationen.

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

  • Stellen Sie bei C++-Projekten sicher, dass die generierten PDB-Dateien über vollständige Debuginformationen verfügen. Öffnen Sie die Projekteigenschaften, und vergewissern Sie sich, dassLinkerdebuggen>>Debuginformationen generieren auf Debuginformationen generieren festgelegt ist, die für Freigabe und Veröffentlichung optimiert sind (/DEBUG:FULL).

Wenn sich die PDB - und .dll - oder .exe-Dateien an unterschiedlichen Stellen befinden, kopieren Sie die PDB-Datei in dasselbe Verzeichnis. Es ist auch möglich, die Code Coverage-Engine für die Suche nach PDB-Dateien an einem anderen Speicherort zu konfigurieren. 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 einer erweiterten Optimierung unterzogen wurde, z. B. profilgesteuerte Optimierung, oder ob sie von einem Profilerstellungstool wie vsinstr.exe oder vsperfmon.exeinstrumentiert wurde.

Erläuterung

Wenn eine Assembly bereits von einem anderen Profilerstellungstool instrumentiert oder optimiert wurde, wird die Assembly in der Code Coverage-Analyse weggelassen. 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 nativer Code (C++)

Analyse

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

Erläuterung

Die Code Coverage-Analyse in Visual Studio ist nur für verwalteten und nativen Code (C++) verfügbar. Wenn Sie mit Drittanbietertools arbeiten, kann der Code teilweise oder ganz auf einer anderen Plattform ausgeführt werden.

Lösung

Keine verfügbar.

Der Projektname enthält "DataCollector"

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

Assembly wurde von NGen installiert

Analyse

Ermitteln Sie, ob die Assembly aus dem Cache für native Images geladen wird.

Erläuterung

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

Lösung

Verwenden Sie eine MSIL-Version der Assembly. Verarbeiten Sie es 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. Code Coverage wird nicht ausgeführt, und entweder wird das Code Coverage-Fenster am Ende des Testlaufs nicht geöffnet, oder es zeigt alte Ergebnisse an.

Erläuterung

Sie können Ihre Komponententests mit einer benutzerdefinierten RUNSETTINGS-Datei ausführen, um Code Coverage-Optionen zu konfigurieren. Mit den Optionen können Sie Dateien ein- 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 Fehleranzeigen.

  • Fehler beim regulären Ausdruck

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

    • Nicht übereinstimmende Klammern (...) oder Klammern ohne Escapezeichen \(...\). Wenn Sie eine Klammer in der Suchzeichenfolge abgleichen möchten, müssen Sie sie mit Escapezeichen versehen. Verwenden Sie beispielsweise Folgendes, um eine Funktion abzugleichen: .*MyFunction\(double\)
    • Sternchen oder Pluszeichen am Anfang eines Ausdrucks. Um eine beliebige Zeichenfolge mit Zeichen abzugleichen, verwenden Sie einen Punkt gefolgt von einem Sternchen: .*

Benutzerdefinierte RUNSETTINGS-Datei mit falschen Ausschlüssen

Analyse

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

Erläuterung

Sie können Ihre Komponententests mit einer benutzerdefinierten RUNSETTINGS-Datei ausführen, um Code Coverage-Optionen zu konfigurieren. Mit den Optionen können Sie Dateien ein- 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 dadurch behoben wird, setzen Sie sie wieder in Phasen ein.

Stellen Sie sicher, dass der Knoten DataCollectors Code Coverage angibt. Vergleichen Sie es mit dem Beispiel unter Anpassen der Code Coverage-Analyse.

Code wird immer als nicht abgedeckt angezeigt.

Initialisierungscode in nativen DLLs wird vor der Instrumentierung ausgeführt.

Analyse

In statisch verknüpftem nativem Code wird ein Teil der Initialisierungsfunktion DllMain und des aufgerufenen Codes manchmal als nicht abgedeckt angezeigt, obwohl der Code ausgeführt wurde.

Erläuterung

Das Code Coverage-Tool funktioniert, indem Instrumentierung in eine Assembly eingefügt wird, kurz bevor die Ausführung der Anwendung gestartet wird. In jeder Assembly, die zuvor geladen wurde, wird der Initialisierungscode in DllMain ausgeführt, sobald die Assembly geladen wird und bevor die Anwendung ausgeführt wird. Dieser Code scheint nicht abgedeckt zu sein, was in der Regel für statisch geladene Assemblys gilt.

Lösung

Keine.

References