Problembehandlung bei der Codeabdeckung
Mit dem Tool zur Codeabdeckungsanalyse in Visual Studio werden Daten für systemeigene und verwaltete Assemblys (DLL- oder EXE-Dateien) erfasst.In einigen Fällen wird im Fenster "Codeabdeckungsergebnisse" jedoch ein Fehler ähnlich dem Folgenden angezeigt: "Es wurden leere Ergebnisse generiert: ..." Es gibt mehrere mögliche Gründe dafür, dass dies geschehen kann.Dieses Thema soll Ihnen helfen, diese Probleme zu beheben.
Anzeige im Normalfall
Wenn Sie Im Menü "Test" den Befehl Codeabdeckung analysieren auswählen und der Buildvorgang sowie die Tests erfolgreich ausgeführt werden, sollte im Fenster "Codeabdeckung" 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 Codeabdeckung.
Mögliche Gründe dafür, dass keine oder alte Ergebnisse angezeigt werden
Verwenden Sie die richtige Edition von Visual Studio?
Sie benötigen Visual Studio Ultimate oder Visual Studio Premium.
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 Codeabdeckung 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 Codeabdeckung analysieren verwenden.
Sie sehen sich ein vorheriges Ergebnis an.
Wenn Sie die Tests ändern und erneut ausführen, können das vorherige Codeabdeckungsergebnis und die Codefarbe der alten Ausführung noch sichtbar sein.
Führen Sie "Codeabdeckung analysieren" aus.
Überprüfen Sie, ob Sie das aktuelle Resultset im Fenster "Codeabdeckungsergebnisse" ausgewählt haben.
PDB-Dateien (Symboldateien) sind nicht verfügbar
Analyse
Öffnen Sie den Zielordner für die Kompilierung (normalerweise "bin\debug"), und überprüfen Sie, ob für jede Assembly eine PDB-Datei im gleichen Verzeichnis vorhanden ist, in dem sich die DLL- oder EXE-Datei befindet.Erklärung
Für das Codeabdeckungsmodul muss während des Testlaufs für jede Assembly der Zugriff auf die zugeordnete PDB-Datei möglich sein.Wenn für eine bestimmte Assembly keine PDB-Datei zur Verfügung steht, wird sie nicht analysiert.Die PDB-Datei und die DLL- oder EXE-Datei müssen im selben Buildvorgang generiert werden.
Lösung
Stellen Sie sicher, dass die Buildeinstellungen so konfiguriert sind, dass die PDB-Datei generiert wird.Wenn die PDB-Dateien beim Erstellen des Projekts nicht aktualisiert werden, öffnen Sie die Projekteigenschaften, wählen Sie die Seite Build aus, wählen Sie Erweitert aus, und überprüfen Sie Debuginformationen.Wenn sich die PDB-Datei und die DLL- oder EXE-Datei an verschiedenen Speicherorten befinden, kopieren Sie die PDB-Datei in dasselbe Verzeichnis.Es ist auch möglich, das Codeabdeckungsmodul so zu konfigurieren, dass an anderen Speicherorten nach PDB-Dateien gesucht wird.Weitere Informationen finden Sie unter Anpassen der Codeabdeckungsanalyse.
Verwenden einer instrumentierten oder optimierten Binärdatei
Analyse
Stellen Sie fest, ob die Binärdatei einer erweiterten Optimierung unterzogen wurde, beispielsweise einer profilgesteuerten Optimierung, 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 Codeabdeckungsanalyse kann für solche Assemblys nicht ausgeführt werden.
Lösung
Deaktivieren Sie die Optimierung, und verwenden Sie einen neuen Build.
Code ist kein verwalteter (.NET) oder systemeigener Code (C++)
Analyse
Überprüfen Sie, ob die Tests für verwalteten oder C++-Code ausgeführt werden.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
Assembly wurde durch NGen installiert
Analyse
Stellen Sie sicher, dass die Assembly nicht aus dem systemeigenen Imagecache geladen wird.Erklärung
Systemeigene Imageassemblys werden aus Leistungsgründen 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.
Benutzerdefinierte Datei ".runsettings" mit ungültiger Syntax
Analyse
Wenn Sie eine benutzerdefinierte Datei ".runsettings" verwenden, kann sie einen Syntaxfehler enthalten.Dies führt dazu, dass keine Codeabdeckungsanalyse ausgeführt wird.Entweder wird das Fenster "Codeabdeckung" am Ende des Testlaufs nicht geöffnet, oder es werden alte Ergebnisse darin angezeigt.
Erklärung
Sie können die Komponententests mit einer benutzerdefinierten Datei ".runsettings" 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 Codeabdeckungsanalyse.Lösung
Es gibt zwei mögliche Fehlertypen:
XML-Fehler
Öffnen Sie die Datei ".runsettings" 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 Klammern ohne Escapezeichen \(...\).Wenn eine Klammer in der Suchzeichenfolge übereinstimmen soll, müssen Sie diese mit einem Escapezeichen versehen.Verwenden Sie für die Übereinstimmung mit einer Funktion beispielsweise folgenden Ausdruck: .*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 Datei ".runsettings" verwenden, stellen Sie sicher, dass sie Ihre Assembly enthält.Erklärung
Sie können die Komponententests mit einer benutzerdefinierten Datei ".runsettings" 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 Codeabdeckungsanalyse.Lösung
Entfernen Sie alle Include-Knoten aus der Datei ".runsettings", 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 Codeabdeckung angegeben wird.Vergleichen Sie ihn mit dem Beispiel unter Anpassen der Codeabdeckungsanalyse.
Einiger Code wird stets als nicht abgedeckt angezeigt
Initialisierungscode in systemeigenen DLLs wird vor der Instrumentation ausgeführt
Analyse
In statisch verknüpftem systemeigenem 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 Codeabdeckungstool fügt kurz vor dem Start der Anwendung Instrumentation in eine Assembly ein.In jeder vor diesem Zeitpunkt geladenen Assembly wird der Initialisierungscode in DllMain ausgeführt, sobald die Assembly geladen wird und vor dem Ausführen der Anwendung.Dieser Code wird als nicht abgedeckt angezeigt.Normalerweise gilt dies für statisch geladene Assemblys.
Lösung
Keine.
Siehe auch
Weitere Ressourcen
Bestimmen des Umfangs des zu testenden Codes mithilfe von Codeabdeckung