2010-11-28 8 views
14

Mein Projekt verwendet CMake als sein Build-System und ich möchte, dass es meine Boost.Test-Testfälle ausführt.Wie kann ich Boost.Test in einem CMake-basierten Projekt verwenden?

Wie kann ich das erreichen? In Boost.Build, konnte ich es wie folgt tun:

import testing ; 

use-project /my_lib : ../src ; 

unit-test my_test 
      : my_test.cpp 
      /my_lib 
      boost_unit_test_framework 
     ; 

lib boost_unit_test_framework ; 

Antwort

14

CMake selbst ist nur ein Build-System; CTest ist ein reiner Test-Runner, der in CMake integriert ist. Weder ist ein Unit-Test-Framework; Dieser Job kann von Boost.Test oder googletest erledigt werden.

Um ein Boost.Test basiertes Unit-Test-Programm in einem CMake Projekt verwendet, dann würden Sie zuerst haben CMake Ihr Gerät zu testen binären bauen und verknüpfen, add_executable und target_link_libraries in Ihrem CMakeLists.txt Skript. Dann können Sie die Unit-Test-Binärdatei zur Liste der Tests hinzufügen, die CTest mit enable_testing und add_test ausführen soll.

Wenn Sie wirklich Lust bekommen möchten, können Sie die CMake Dokumentation schauen durch, wie CMake Suche durch alle Quelldateien zu haben, um Unit-Tests automatisch zu finden und zu bauen, aber der Reihe nach ...

+0

Danke, das hat funktioniert! – forneo

+0

+1 für diese Information. Könntest du vielleicht erklären, wie man Unit-Tests automatisch erstellt (http://stackoverflow.com/q/16857517/819272)? – TemplateRex

-2

Siehe die CMake Testprojekte und/oder die CTest Sachen in der CMake Dokumentation/Buch.

+0

Das scheint ein anderes Test-Framework zu sein, gibt es keine Möglichkeit, Boost.Test zu verwenden? – forneo

+0

Die richtige Antwort ist, dass Sie CTest verwenden sollten. Wenn Sie dies tun, können Sie 'test 'durchführen und/oder ctest mit/ohne Dashboard verwenden, um ein beliebiges Programm zu erstellen und auszuführen. Schauen Sie erneut in der CMake-Dokumentation nach. –

10

I habe einige Module unter https://github.com/rpavlik/cmake-modules/ einschließlich einige für die Integration Boost-Test gemacht - siehe die Readme in diesem Repo für Informationen über die einfachste Möglichkeit, sie zu verwenden.

Dann möchten Sie Folgendes tun, unter der Annahme, dass test_DimensionedQuantities.cpp eine boost.test-Testtreiberquelle ist.

include(BoostTestTargets) 
add_boost_test(DimensionedQuantities 
SOURCES 
test_DimensionedQuantities.cpp) 

Dies fügt nur einen einzigen CTest-visible-Test hinzu, der fehlschlägt, wenn einer der Boost-Tests fehlschlägt. Wenn Sie Tests, die nach dem Namen der Testfahrer festgelegt werden können (die einfachsten Makros in diese Kategorie fallen), können Sie etwas tun:

include(BoostTestTargets) 
add_boost_test(DimensionedQuantities 
SOURCES 
test_DimensionedQuantities.cpp 
TESTS 
CheckCollision 
BodyPoseNotCorrupted 
CheckGraspTransform 
BodyFollowsMockManip1D 
BodyFollowsMockManip2D 
BodyFollowsMockManip3D) 

Es gibt ein paar mehr Optionen, einschließlich der Konfiguration eines Headers zu Wählen Sie die beste Option für eine: inkludierte Version von UTF, b: static link, oder c: dynamic link, sowie für die Verknüpfung mit Bibliotheken, etc. Suchen Sie in der cmake-Datei nach Informationen.

Verwandte Themen