2010-11-28 6 views
14

Mon projet utilise CMake comme système de construction, et je veux qu'il exécute mes cas de test Boost.Test.Comment utiliser Boost.Test dans un projet basé sur CMake?

Comment puis-je y parvenir? En Boost.Build, je pouvais le faire comme suit:

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 ; 

Répondre

14

CTest est un simple testeur intégré à CMake. Aucun n'est un cadre de test unitaire; ce travail peut être fait par Boost.Test ou googletest.

Pour utiliser un programme de test unitaire à base Boost.Test dans un projet CMake, vous auriez d'abord CMake construire et lier votre binaire de test unitaire, en utilisant add_executable et target_link_libraries dans votre script CMakeLists.txt. Ensuite, vous pouvez ajouter le test binaire unitaire à la liste des tests pour que CTest s'exécute avec enable_testing et add_test.

Si vous voulez vraiment de fantaisie, vous pouvez regarder à travers la documentation CMake pour savoir comment faire la recherche CMake à travers tous vos fichiers source pour trouver et construire des tests unitaires automatiquement, mais d'abord d'abord ...

+0

Merci, ça a marché! – forneo

+0

+1 pour cette info. Pourriez-vous peut-être expliquer comment [construire automatiquement des tests unitaires] (http://stackoverflow.com/q/16857517/819272)? – TemplateRex

-2

Voir les projets de test CMake et/ou les choses CTest dans la documentation CMake/livre. CMake lui-même est juste un système de construction;

+0

Cela semble être un cadre de test différent, est-il impossible d'utiliser Boost.Test? – forneo

+0

La bonne réponse est que vous devriez utiliser CTest. Si vous le faites, vous serez en mesure de faire un test et/ou d'utiliser ctest, avec/sans le tableau de bord, pour construire et exécuter le programme que vous voulez. Encore une fois, regardez dans la documentation de CMake. –

10

I 'ai fait quelques modules à https://github.com/rpavlik/cmake-modules/, y compris certains pour intégrer le test de boost - voir le readme dans ce repo pour plus d'informations sur la façon la plus simple de les utiliser.

Ensuite, vous voudrez faire ce qui suit, en supposant que test_DimensionedQuantities.cpp est une source de pilote de test boost.test.

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

Ceci ajoute un seul test CTest-visible qui échoue si l'un des tests d'accélération échoue. Si vous avez des tests qui peuvent être spécifiées par nom au pilote d'essai (les macros simples tombent dans cette catégorie), vous pouvez faire quelque chose comme ceci:

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

Il y a un tas d'autres options, y compris la configuration d'un en-tête pour choisissez la meilleure option de: une version incluse de UTF, b: lien statique, ou c: lien dynamique, ainsi que la liaison avec les bibliothèques, etc. Il suffit de regarder dans le fichier cmake pour plus d'informations.

Questions connexes