Ich verwende CMake, um mein Projekt zu erstellen. Ich habe eine Unit-Test-Binärdatei hinzugefügt, die das Boost-Unit-Test-Framework verwendet. Diese eine Binärdatei enthält alle Komponententests. Ich habe diese Binärdatei hinzugefügt, die von CTest ausgeführt werden soll:
ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)
Die Build-Ausgabe in Visual Studio zeigt jedoch nur das Ergebnis der Ausführung von CTest:
Start 1: UnitTests
1/1 Test #1: UnitTests ................***Failed 0.05 sec
0% tests passed, 1 tests failed out of 1
Dies ist nicht sehr hilfreich, da ich nicht sehen kann, welcher Test fehlgeschlagen ist. Wenn ich ctest manuell über die Befehlszeile mit ausführe, erhalte --verbose
ich die Ausgabe eines Boost-Unit-Tests, der angibt , was tatsächlich fehlgeschlagen ist:
1: Test command: tftest.exe
1: Test timeout computed to be: 9.99988e+006
1: Running 4 test cases...
1: test-main.cpp(20): error in "sanity_check3": check 1 == 2 failed
1:
1: *** 1 failure detected in test suite "Master Test Suite"
1/1 Test #1: UnitTests ................***Failed 0.00 sec
Was muss ich also in der Datei CMakeLists.txt ändern, damit CTest --verbose
jederzeit ausgeführt wird? Gibt es eine bessere Möglichkeit, Boost-Unit-Tests mit CMake / CTest zu verwenden?
Antworten:
Sie können die Umgebungsvariable festlegen
CTEST_OUTPUT_ON_FAILURE
, die Ihnen die Ausgabe des Testprogramms anzeigt, wenn der Test fehlschlägt. Eine Möglichkeit, dies bei Verwendung von Makefiles und der Befehlszeile zu tun, wäre folgende:Diese Frage und Antwort zum Stapelüberlauf zeigt, wie Umgebungsvariablen in Visual Studio festgelegt werden.
quelle
SET(CTEST_OUTPUT_ON_FAILURE TRUE)
undSET(CTEST_OUTPUT_ON_FAILURE ON)
, aber es hat keine Wirkung. Andere Berichte im Web bestätigen, dass dies nicht funktioniert.set(CTEST_OUTPUT_ON_FAILURE TRUE)
legt keine Umgebungsvariable fest . Versuchen Sie dies in der Befehlszeile :CTEST_OUTPUT_ON_FAILURE=TRUE make test
.make CTEST_OUTPUT_ON_FAILURE=1 test
ist kürzer und schöner IMO.Sie können
ctest
direkt anrufen , nachdem Sie Ihr Projekt erstellt und erstellt haben.quelle
Sie können den
Testing/Temporary
Unterordner überprüfen . Es wird automatisch erstellt, nachdem make test ausgeführt wurde. Dieser Ordner enthält zwei Dateien:LastTest.log
undLastTestsFailed.log
.LastTest.log
enthält die gewünschte Ausgabe für Lauftests.LastTestFailed.log
enthält Namen fehlgeschlagener Tests. Sie können sie also nach der Ausführung manuell überprüfenmake test
.Die zweite Möglichkeit besteht darin, ctest zu erhalten, um Ihnen den Inhalt von Protokolldateien nach dem Ausführen von Tests anzuzeigen:
Platzieren Sie im Build-Verzeichnis (von dem aus Sie ausführen
make test
) die Datei CTestCustom.ctest (Sie können dies beispielsweise mit dem Befehl configure file tun ) mit folgendem InhaltCTEST_CUSTOM_POST_TEST ("cat Testing / Temporary / LastTest.log")
Anstelle von cat können Sie auch einen beliebigen Windows-Befehl cmd verwenden, der ähnliche Aktionen ausführt.
make test
erneut und erzielen Sie Gewinn!Weitere Informationen zum Anpassen von ctest finden Sie hier . Gehen Sie einfach zum Abschnitt "Anpassen von cmake". Viel Glück!
quelle
Ich musste das "Check" -Ziel selbst hinzufügen. "make tests" macht aus irgendeinem Grund nichts. Also, was ich getan habe (wie irgendwo im Stackoverflow vorgeschlagen) - ich habe dieses Ziel manuell hinzugefügt. Um eine ausführliche Ausgabe zu erhalten, habe ich es einfach so geschrieben:
quelle
Es gibt eine sehr einfache Lösung (die aus irgendeinem Grund über die Google-Suche schwer zu finden ist):
Wenn Sie CMake mit der Open Folder-Funktion von Visual Studio verwenden, können Sie die hinzufügen
Einstellung zu Ihrer Build-Konfiguration.
quelle
make check CTEST_OUTPUT_ON_FAILURE=TRUE
quelle
Dies macht die Testausgabe ausführlicher:
quelle
Mein Ansatz ist eine Kombination der Antworten von ony , von zbyszek und von tarc . Ich verwende die
${CMAKE_COMMAND}
Variable (die auf den absoluten Pfad zur aufgerufenen ausführbaren cmake-Datei gesetzt ist) mit dem-E env CTEST_OUTPUT_ON_FAILURE=1
Argument, um den tatsächlichen ctest-Befehl mit aufzurufen${CMAKE_CTEST_COMMAND} -C $<CONFIG>
. Um zu verdeutlichen, was los ist, beginne ich mit dreicmake -E echo
Befehlen, um das aktuelle Arbeitsverzeichnis und den aufzurufenden Befehl ctest anzuzeigen. So rufe ich anadd_custom_target
.Dies funktioniert gut mit der MSVC-IDE, bei der alle Testfehler als anklickbare Kompilierungsfehler angezeigt werden. In cmake -E env finden Sie eine Dokumentation des
cmake -E
tragbaren Befehlszeilen-Tool-Modus. Ich füge auch eine Abhängigkeit hinzu,ALL_BUILD
damit alle Projekte erstellt werden, bevor dascheck
Ziel aufgerufen wird . (Bei Linux-Builds muss möglicherweise Folgendes ersetztALL_BUILD
werdenALL
. Ich habe dies noch nicht unter Linux getestet.)quelle
Für Benutzer von Visual Studio gibt es hier eine weitere Variante (Hack) des Themas:
quelle
Um das Ergebnis mit einer XML-Datei anzuzeigen, müssen Sie den Test mit dem folgenden Befehl ausführen
und wir haben das Ergebnis in der Datei Testing / 1234123432 / test.xml gefunden, und andere Dateien werden ebenfalls im Testordner generiert
quelle
ctest -VV
oderctest --extra-verbose
Aus der Dokumentation :
quelle