web-dev-qa-db-fra.com

Intégration de Catch lib (tests unitaires) et CTest (CMake)

Je cherche un exemple réussi d'intégration de Catch CatchLib avec le test CMake (Ctest). si je comprends bien, c'est un script cmake supplémentaire qui doit analyser la sortie de l'application? Est-ce que quelqu'un a déjà écrit ça? probablement partagé cela?

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

mise à jour (solution trouvée):

Je me suis engagé script cmake à CatchLib, pour l'intégration de Catch avec CTest. ceci est une version simplifiée du script cmake de Fraser99 ici

20
amigo421

L'intégration de Catch avec CMake est plutôt simple, car il s'agit d'une bibliothèque uniquement en-tête.

Voici un bref aperçu de ce que vous devez faire:

Vous pouvez soit supposer que les sources Catch sont déjà installées sur la machine de génération, soit utiliser ExternalProject pour les récupérer dans le cadre du processus de génération.

Dans les deux cas, vous vous retrouverez avec les fichiers d'en-tête Catch dans un répertoire connu de votre machine de génération. Je recommanderais de créer une cible d'interface pour faire connaître ces informations à vos exécutables de test:

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

De cette façon, vous pouvez simplement spécifier Catch comme dépendance à target_link_libraries:

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

Comme d'habitude avec CMake, add_test s'occupe de l'introduction des tests dans CTest:

enable_testing()
add_test(NAME MyAwesomeTest COMMAND my_test)

Et c'est déjà fini. Courir make test sur le projet construit pour exécuter vos tests.

J'ai un projet sur Github qui fait cela si vous avez besoin de voir un exemple de travail complet.

38
ComicSansMS

Installez catch avec:

 $ git clone https://github.com/catchorg/Catch2 <catch_src_dir>
 $ mkdir <catch_bin_dir>
 $ cd <catch_bin_dir>
 $ cmake -DBUILD_TESTING:BOOL=FALSE <catch_src_dir>
 $ make
 $ make install

Ajoutez ensuite ce qui suit au CMakeLists.txt:

find_package(Catch2 REQUIRED)
target_link_libraries(tests Catch2::Catch2)

Voir ici .

6
ricab