151 votes

En utilisant CMake, comment puis-je obtenir la sortie verbose de CTest ?

J'utilise CMake pour construire mon projet. J'ai ajouté un binaire de test unitaire qui utilise le framework de test unitaire Boost. Ce binaire contient tous les tests unitaires. J'ai ajouté ce binaire pour qu'il soit exécuté par CTest :

ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)

Mais la sortie de la compilation dans Visual Studio ne montre que le résultat de l'exécution de CTest :

      Start 1: UnitTests
  1/1 Test #1: UnitTests ................***Failed    0.05 sec

  0% tests passed, 1 tests failed out of 1

Ce n'est pas très utile, car je ne peux pas voir quel test a échoué. Si je lance ctest manuellement à partir de la ligne de commande avec --verbose J'obtiens la sortie d'un test unitaire Boost qui indique ce qui a échoué :

1: Test command: tftest.exe
1: Test timeout computed to be: 9.99988e+006
1: Running 4 test cases...
1: test-main.cpp(20): error in "sanity_check3": check 1 == 2 failed
1:
1: *** 1 failure detected in test suite "Master Test Suite"
1/1 Test #1: UnitTests ................***Failed    0.00 sec

Donc, que dois-je changer dans le fichier CMakeLists.txt pour que CTest fonctionne avec --verbose à tout moment ? Existe-t-il une meilleure façon d'utiliser les tests unitaires Boost avec CMake/CTest ?

21voto

zbyszek Points 1181

make check CTEST_OUTPUT_ON_FAILURE=TRUE

19voto

xiaobai Points 2004

Cela rend la sortie du test plus verbeuse :

make test ARGS="-V"

10voto

Phil Points 11

Mon approche est une combinaison des réponses suivantes d'un seul , de zbyszek et de tarc . J'utilise le ${CMAKE_COMMAND} (qui est fixée au chemin absolu de l'exécutable cmake invoqué) avec la variable -E env CTEST_OUTPUT_ON_FAILURE=1 pour invoquer la commande ctest actuelle en utilisant l'argument ${CMAKE_CTEST_COMMAND} -C $<CONFIG> . Pour aider à clarifier ce qui se passe, je commence par trois cmake -E echo pour afficher le répertoire de travail actuel et la commande ctest à invoquer. Voici comment j'appelle add_custom_target .

add_custom_target(check 
        ${CMAKE_COMMAND} -E echo CWD=${CMAKE_BINARY_DIR}
        COMMAND ${CMAKE_COMMAND} -E echo CMD=${CMAKE_CTEST_COMMAND} -C $<CONFIG>
        COMMAND ${CMAKE_COMMAND} -E echo ----------------------------------
        COMMAND ${CMAKE_COMMAND} -E env CTEST_OUTPUT_ON_FAILURE=1
            ${CMAKE_CTEST_COMMAND} -C $<CONFIG>
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    DEPENDS ALL_BUILD
    )

Cela fonctionne bien avec l'IDE MSVC où les erreurs de test sont affichées sous forme d'erreurs de compilation cliquables. Voir cmake -E env pour la documentation de la cmake -E mode outil de ligne de commande portable. J'ajoute également une dépendance sur ALL_BUILD afin que tous les projets soient construits avant d'invoquer la fonction check cible. (Sur les versions Linux, il se peut que l'on doive remplacer ALL_BUILD avec ALL (Je n'ai pas encore testé cela sous Linux).

6voto

Tarc Points 318

Pour les personnes utilisant Visual Studio, voici une autre variation (hack) sur le thème :

cmake -E env CTEST_OUTPUT_ON_FAILURE=1 cmake --build . --target RUN_TESTS

5voto

Daniel Points 366

ctest -VV o ctest --extra-verbose

De la documentation :

Permet d'obtenir une sortie plus verbeuse des tests.

Les résultats des tests sont normalement supprimés et seules des informations sommaires sont fournies. affichées. Cette option permet d'afficher encore plus de résultats de tests.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X