2016-06-29 32 views
2

Ich verwende QT Creator, um an einem mittelgroßen Projekt in C++ zu arbeiten.Generieren der Testabdeckung der statischen C++ - Bibliothek, wie von separaten Testklassen aufgerufen

Die Projektstruktur sieht im Grunde wie diese

  1. Projekt

    • Gruppe A
      • Bibliothek A1
    • Gruppe B
      • Bibliothek B1
      • Bibliothek B2
      • ... etc
    • -Test

      • LibA1_Test
      • LibB1_Test
      • LibB2_Test
      • ... etc

Die Bibliotheken werden von den ausführbaren Dateien im Testprojekt getestet. Ich habe es geschafft, die Tests selbst mit gcov zu kompilieren und mit lcov Code Coverage-Berichte zu erstellen, aber alles, wofür sie die Abdeckung zeigten, waren die Testfälle, nicht der eigentliche Code, den ich teste. Ich habe auch versucht, die statischen Bibliotheken mit gcov zu kompilieren, aber wenn ich die Tests gegen diese Bibliotheken durchführe, erzeugt es keine der gcov-Ausgabedateien.

Wie konnte ich die gcov-Ausgabedateien generieren, indem ich meine Projektbibliotheken mit den Tests verknüpfte? Ich möchte sehen, ob es Lücken in meinen Komponententests gibt.

Antwort

0

Vom ld manual

--whole-archive
Für jedes Archiv in der Befehlszeile nach der --whole-archive Option erwähnt, umfassen jede Objektdatei im Archiv in dem Link, anstatt das Archiv für das gewünschte Objekt sucht Dateien.

So verknüpfen Sie Ihre statische-Bibliothek in Ihren Test --whole-archive, die in dem Test binär mit der gesamten statischen-Bibliothek führen, und gibt gcov Sichtbarkeit des gesamten Code

+0

Da ich speziell QT Creator wurde um mein Projekt aufzubauen, wollte ich nur hinzufügen, welche Schritte ich unternehmen musste. In meinen Testapplikationen habe ich hinzugefügt: 'QMAKE_CXXFLAGS + = -g -Wall -fprofile-arcs -test-coverage -OO' und' QMAKE_LFLAGS + = -g -Wall -Wl, - whole-archive -lLibA1 -Wl, - no-whole-archive -fprofile-arcs -ftest-coverage -00' zur .proj-Datei, sowie 'LIBS + = -lgcov'. Wenn Sie die Bibliotheken nicht angeben, die in den gesamten Archivierungsbefehl aufgenommen werden sollen, und dann daran denken, sie zu schließen, erhalten Sie viele Fehler. – alayers2