2016-01-20 21 views
15

szukam udany przykład Złap CatchLib integracji z testu CMake (Ctest). jak rozumiem, jest to dodatkowy skrypt cmake, który musi przeanalizować aplikację ouput? Czy ktoś już to napisał? prawdopodobnie udostępnił to?Złap lib (testowanie jednostkowe) i CTest (CUpewnij) integracja

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

aktualizacja (rozwiązanie zostało znalezione):

mam popełnione cmake script do CatchLib, na połów integracji z CTest. jest to uproszczona wersja skryptu cmake Fraser99: here

+1

Istnieje dyskusja na temat CMake w dokumentacji [Catch's Build System] (https://github.com/philsquared/Catch/blob/master/docs/build-systems.md#cmake). – phoenix

Odpowiedz

24

Integracja Catch z CMake jest raczej prosta, ponieważ jest to biblioteka tylko nagłówkowa.

Oto szybki przegląd tego, co trzeba zrobić:

Można też założyć, że źródła połowowe są już zainstalowane na maszynie budowlanej lub użyj ExternalProject do pobierania je jako część procesu kompilacji.

W obu przypadkach będzie można skończyć z plików nagłówkowych połowu w pewnym znanym katalogu na maszynie budowlanej. Polecam tworzenie cel interfejsu za przeprowadzenie tej informacji znaną do wykonywalnych testowych:

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

W ten sposób można łatwo określić złapać jak zależność do target_link_libraries:

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

Jak zwykle z CMake, add_test dba o wprowadzenie testów CTest:

enable_testing() 
add_test(NAME MyAwesomeTest COMMAND my_test) 

I to już. Uruchom make test na zbudowanym projekcie, aby uruchomić testy.

Mam project on Github, który robi to, jeśli chcesz zobaczyć pełny przykład pracy.

+0

dziękuję, to jest to, czego szukałem – amigo421

+0

, ale czy istnieją skrypty do automatycznego dodawania testów ctest? – amigo421

+0

Tylko jeśli napiszesz. W jaki sposób CMake powinien wiedzieć, które z twoich plików wykonywalnych są testami? – ComicSansMS

2

EDIT2: te dni Catch2 instaluje własny moduł CUpewnij tak, po instalacji, można go używać w innym projekcie cmake z

include(GNUInstallDirs) 
find_package(Catch2 REQUIRED) 

Można zrobić swój projekt CUpewnij zależą połów korzystania find_package. W ten sposób nie zaliczasz Catch siebie i możesz go aktualizować samodzielnie. Proces jest wyjaśniony w this recipe, z tym wyjątkiem, że nie musisz zajmować się bibliotekami, ponieważ Catch jest tylko nagłówkiem.

CMakeLists.txt (zakładając, że masz swoją FindCatch.cmake w miejscu [patrz niżej] i twoje testy w 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) 

Przykładem my_tests.CPP:

#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") 
{ 
    ... 
} 

... 

Trzeba dodać FindCatch.cmake moduł do projektu, pod cmake/Modules. Wyszukaj w internecie plik FindCatch.cmake.

Wreszcie, możesz zbudować i uruchomić testy z make test.


EDIT: Ewentualnie można mieć cmake pobierania połowu z git podczas kompilacji, po these instructions z github złapać za. Wymaga to jednak zależności od git.