Question

Je construis des tests en utilisant CTest. En général, je peux mettre en place le test simplement la ligne:

ADD_TEST(Test_Name executable args)

Cependant, j'ai rencontré un problème, j'ai quelques tests qui nécessitent deux commandes à exécuter pour que cela fonctionne, est-il possible que je peux exécuter deux programmes dans un seul ctest, ou suis-je obligé de créer un nouveau test pour chacun?

Merci.

Était-ce utile?

La solution

La commande add_test accepte un seul exécutable, mais vous pouvez exécuter un exécutable qui est vraiment un script. Pour ce faire, d'une manière multi-plateforme, écrire le script dans CMake lui-même. CMake a l'option -P pour exécuter des parties arbitraires de langage de script CMake lorsque vous exécutez make ou make test, plutôt qu'au moment de la génération Makefile.

Malheureusement, vous ne pouvez pas passer des arguments à un tel script. Mais vous pouvez définir des variables à des valeurs, ce qui est tout aussi bon.

Ce script vous pouvez appeler runtests.cmake, il exécute les commandes cmd1 et CMD2 et vérifie chaque pour un code de retour non nul, retour sur CMake lui-même avec une erreur si cela se produit:

macro(EXEC_CHECK CMD)
    execute_process(COMMAND ${CMD} RESULT_VARIABLE CMD_RESULT)
    if(CMD_RESULT)
        message(FATAL_ERROR "Error running ${CMD}")
    endif()
endmacro()
exec_check(${CMD1})
exec_check(${CMD2})

... puis ajouter vos cas de test comme ceci:

add_executable(test1 test1.c)
add_executable(test2 test2.c)
add_test(NAME test
    COMMAND ${CMAKE_COMMAND}
            -DCMD1=$<TARGET_FILE:test1>
            -DCMD2=$<TARGET_FILE:test2>
    -P ${CMAKE_CURRENT_SOURCE_DIR}/runtests.cmake)

$<TARGET_FILE:test1> s'étendu au chemin complet vers l'exécutable lors de la génération build fichier. Lorsque vous exécutez make test ou équivalent ce courra « cmake -P runtests.cmake » définissant les variables cmd1 et CMD2 aux programmes de test appropriés. Le script exécutera alors vos 2 programmes en séquence. Si l'un des programmes de test échoue, l'ensemble test échoue. Si vous avez besoin de voir la sortie du test, vous pouvez exécuter make test ARGS=-V

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top