2016-01-20 9 views
15

Ich bin auf der Suche nach erfolgreichen Beispiel Catch CatchLib Integration mit CMake-Test (Ctest). Wie ich verstehe, ist dies ein zusätzliches cmake-Skript, das die Anwendungsausgabe parsen muss? Hat jemand das schon geschrieben? wahrscheinlich geteilt?Catch lib (Komponententests) und CTest (CMake) Integration

============================================== ====

update (Lösung gefunden wurde):

I cmake script zu CatchLib, für die Integration Fang mit CTest begangen haben. Dies ist eine vereinfachte Version von Fraser99s cmake-Skript here

+1

Es gibt einige Diskussionen über CMake in [Catch's Build System Dokumentation] (https://github.com/philesquared/Catch/blob/master/docs/build-systems.md#cmake). – phoenix

Antwort

24

Catch mit CMake zu integrieren ist ziemlich einfach, da es sich um eine Nur-Header-Bibliothek handelt.

Hier ist ein kurzer Überblick von dem, was Sie tun müssen:

Sie können entweder annehmen, dass die Fang Quellen sind bereits auf dem Build-Rechner installiert oder ExternalProject verwenden, um sie als Teil des Build-Prozesses zu holen.

In jedem Fall werden Sie mit den Catch-Header-Dateien in einem bekannten Verzeichnis auf Ihrem Build-Rechner enden. Ich würde eine Schnittstelle Ziel für die Herstellung dieser Informationen bekannt zu Ihrem Test Executables empfehlen erstellen:

add_executable(my_test ${MY_TEST_SOURCES}) 
target_link_libraries(my_test Catch) 

Wie üblich bei CMake,:

add_library(Catch INTERFACE) 
target_include_directories(Catch INTERFACE ${YOUR_CATCH_INCLUDE_DIR}) 

Auf diese Weise Sie einfach fangen als Abhängigkeit target_link_libraries angeben add_test kümmert sich um die Tests CTest der Einführung:

enable_testing() 
add_test(NAME MyAwesomeTest COMMAND my_test) 

Und das ist es schon. Führen Sie make test auf dem erstellten Projekt aus, um Ihre Tests auszuführen.

Ich habe eine project on Github, die dies tut, wenn Sie ein vollständiges Arbeitsbeispiel sehen müssen.

+0

danke das ist das, was ich suchte – amigo421

+0

aber gibt es ein Skript, um Ctest Tests automatisch hinzufügen? – amigo421

+0

Nur wenn du eins schreibst. Wie sollte CMake wissen, welche Ihrer ausführbaren Dateien die Tests sind? – ComicSansMS

2

EDIT2: in diesen Tagen Catch2 installiert ein eigenes Cmake Modul so, nach der Installation, kann es mit

include(GNUInstallDirs) 
find_package(Catch2 REQUIRED) 

Sie Ihr Projekt CMake machen können in einem anderen Cmake Projekt verwendet werden auf Fang hängen mit find_package. Auf diese Weise schließen Sie Catch nicht ein und können es unabhängig aktualisieren. Der Prozess wird unter this recipe erläutert, außer dass Sie in diesem Fall nicht mit Bibliotheken arbeiten müssen, da Catch nur eine Kopfzeile ist.

CMakeLists.txt (vorausgesetzt, Sie Ihre FindCatch.cmake an der richtigen Stelle [siehe unten] und die Tests in my_tests.cpp):

list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules/") 
find_package(Catch REQUIRED) 

include_directories(${CATCH_INCLUDE_DIRS}) 

add_executable(my_tests my_tests.cpp) 
add_test(NAME MyTests COMMAND my_tests) 

Ein Beispiel my_tests.cav:

#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() 
#include "catch/catch.hpp" 

#include "stuff_to_test.h" 

TEST_CASE("A test case") 
{ 
    ... 
} 

... 

Sie benötigen einen FindCatch.cmake Modul zu einem Projekt unter cmake/Modules hinzuzufügen. Durchsuchen Sie das Web nach FindCatch.cmake.

Schließlich können Sie die Tests mit make test erstellen und ausführen.


EDIT: Alternativ können Sie Cmake herunterladen Fang von git während des Build nach these instructions von Catch Github haben. Dies erfordert jedoch eine Abhängigkeit von Git.