Angenommen, dass mit "mit verschiedenen Optionen kompiliert" meinten Sie, dass Sie so kompilieren, dass Sie nach der Vorverarbeitung verschiedene Ausgaben erhalten, mit der Hilfe von LCOV (wie von k0n3ru erwähnt) konnte ich es tun. Hier ist der Beispielcode in der Datei sut.c:
#include "sut.h"
#include <limits.h>
int foo(int a) {
#if defined(ADD)
a += 42;
#endif
#if defined(SUB)
a -= 42;
#endif
return a;
}
mit sut.h nur die Deklaration von foo bietet und eine einfache Haupt in test.c, die foo aufruft und druckt die Ergebnisse. Dann mit dieser Folge von Befehlen konnte ich eine total.info Datei mit 100% Abdeckung für sut.c erstellen:
> g++ --coverage -DADD test.c sut.c -o add.out
> ./add.out
> lcov -c -d . -o add.info # save data from .gdda/.gcno into add.info
> g++ --coverage -DSUB test.c sut.c -o sub.out
> ./sub.out
> lcov -c -d . -o sub.info # save again, this time into sub.info
> lcov -a add.info -a sub.info -o total.info # combine them into total.info
> genhtml total.info
die dann für sut.c zeigt folgende Ergebnisse:
EDIT (Danke an Gluttton für die Erinnerung an diesen Teil): Von der total.info-Datei im lcov-Format zur Cobertura-XML-Ausgabe sollte dann mit Hilfe des hier bereitgestellten "lcov to cobertura XML-Konverters" möglich sein (obwohl ich das nicht versucht habe): https://github.com/eriwen/lcov-to-cobertura-xml
Die Tatsache, dass die Zusammenführung von Coverage-Informationen möglich ist, bedeutet jedoch nicht, dass dies eine gute Idee ist: Coverage, IMO, hat nur einen begrenzten Aussagewert hinsichtlich der Qualität einer Testsuite. Durch das Zusammenführen von Coverage-Ergebnissen von verschiedenen Präprozessor-Ausgaben wird dieser Wert noch weiter verringert.
Das ist, weil die Möglichkeiten für Entwickler, über Szenarien zu lernen, die sie nicht berücksichtigt haben, reduziert werden: Durch die bedingte Kompilierung können die Kontrollstruktur und der Datenfluss des Codes zwischen den Präprozessor-Ausgaben enorm variieren - Coverage-Informationen, die sich aus Overlaying ergeben Die Ergebnisse von Testläufen für verschiedene Präprozessorausgaben können eine sinnvolle Interpretation der Ergebnisse unmöglich machen.
lcov macht das. Vielleicht kann jemand aus dem lcov-Projekt helfen. – k0n3ru
@ k0n3ru, lcov Daten in einigen Zwischenformat zusammenführen. – Gluttton
Das Problem mit lcov ist, dass ich das XML-Cobertura-Format nicht mehr habe. –