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.
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:
- Führen Sie Code Coverage analysieren aus.
- 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:
.*
- 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:
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.